本文是学习GB-T 33602-2017 电力系统通用服务协议. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们
本标准规定了电力系统通用服务的体系结构、交互方式、服务原语及通信协议。
本标准适用于各级电网调度控制中心,各类发电厂、变电站内部及相互间的预定义和自定义的服务
数据交互,适用于各类电力监控系统及设备的设计、开发、建设、运行、维护各个环节。
下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文
件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。
GB/T18700.1 远动设备和系统 第6部分:与ISO 标准和ITU-T
建议兼容的远动协议 第503篇:
TASE.2 服务和协议
GB/T 33601 电网设备通用模型数据命名规范
GB/T 33603—2017 电力系统模型数据动态消息编码规范
GB/T 33604 电力系统简单服务接口规范
DL/T 476 电力系统实时数据通信应用层协议
DL/T 634.5104 远动设备及系统 第5-104部分:传输规约采用标准传输协议集的
IEC 60870-5-
DL/T 667 远动设备及系统 第 5 部 分 传输规约 第103篇
继电保护设备信息接口配套
标准
DL/T719 远动设备及系统 第 5 部 分 传输规约 第102篇
电力系统电能累计量传输配套
标准
DL/T 860.71 电力自动化通信网络和系统
第7-1部分:基本通信结构——原理和模型
DL/T 860.72—2013 电力自动化通信网络和系统
第7-2部分:基本信息和通信结构——抽象通
信服务接口(ACSI)
DL/T 860.73 电力自动化通信网络和系统
第7-3部分:基本通信结构——公用数据类
DL/T 860.74 电力自动化通信网络和系统
第7-4部分:基本通信结构——兼容逻辑节点类和数
据类
下列术语和定义适用于本文件。
3.1
通用服务协议 general service protocol
规定了基于面向服务架构(SOA)
的、适用于各级电网调度控制中心和各类发电厂及变电站的通用
服务,包括二进制的服务描述和服务访问以及相应的二进制通信协议。
3.2
协议兼容服务模式 protocol compatibility service
mode
采用兼容原有通信协议(如:DL/T 860、DL/T 634.5104、GB/T 18700.1、DL/T
476 等)的特定服务
GB/T 33602—2017
模式,以便尽可能利用原有通信程序资源。
3.3
服务原语 service primitive
对服务原型名称和调用接口参数进行的标准化准确描述,服务原语的标准名称采用英语动宾短语
的形式命名,在软件程序和服务列表中都可直接使用,类似于软件程序中的函数原型。服务原语的中文
(或其他文字)名称, 一般只在服务列表中使用。
3.4
预定义服务 predefined service
已提供的服务原语和公共数据类定义,服务提供者和服务消费者在遵循本文件规定的前提下,可直
接进行服务的实现和调用。
3.5
自定义服务 custom service
在已有定义范围之外的服务,由服务提供者自行定义的服务原语和数据类型,服务消费者按照服务
提供者或服务代理提供的服务定义信息,在解析后进行服务的调用。
3.6
服务代理 service proxy
代表多个服务提供者或服务消费者实现跨越广域(或局域)边界的服务交互的特殊网络服务,服务
代理位于服务提供者和服务消费者之间,允许服务的消费者通过代理与服务的提供者进行非直接的
连接。
3.7
服务域 service domain
按物理或逻辑关系划分服务所属域,位于服务代理后端,通过服务代理提供或获取相关的服务。
3.8
域管理 domain management
监控和管理区域内所有服务域,并提供域注册管理、域名查询等功能。
3.9
服务管理 service management
管理服务域内部所有服务,提供服务的注册、定位(发现)及服务信息查询服务。
下列缩略语适用于本文件。
AC: 属性个数(Attribute Counter)
APCH: 应用协议控制头(Application Protocol Control Header)
APDU: 应用协议数据单元(Application Protocol Data Unit)
ASDB: 应用服务数据单元体(Application Service Data-unit Body)
ASDH: 应用服务数据单元头(Application Service Data-unit Header)
ASDU: 应用服务数据单元(Application Service Data Unit)
CC: 控制码(Control Code)
CH: 频道(Channel)
CI:类标识(Class Identifier)
GB/T 33602—2017
CT: 编码类型(Coding Type)
DS:数据集(Data Set)
EF: 扩展标志(Extension Flag)
FL:帧长度(Frame Length)
GSP: 通用服务协议(General Service Protocol)
IP:互联网协议(Internet Protocol)
M0: 兼容 ASN.1 编码方式(Compatible with ASN.1 coding mode)
M1: 带名字的 ASN.1 编码方式(ASN.1 coding mode with name)
M2: 对象编码方式(Object coding mode)
M3: 类编码方式(Class coding mode)
M 编码:电力系统模型数据动态消息编码规范(Coding Specification of
Dynamic Message)
OC: 对象个数(Object Counter)
OS: 对象尺寸(Object Size)
OSI:开放系统互联(Open System Interconnection)
PC:参数个数(Parameter Counter)
PI:协议标识(Protocol Identifier)
SC:服务码(Service Code)
SEQ: 序列编号(2个八位位组)(Sequence)
SOA: 面向服务架构(Service Oriented Architecture)
SQ: 短序号(1个八位位组)(Short Sequence)
SS:子服务(Sub-Service)
TCP: 传输控制协议(Transport Control Protocol)
UDP: 用户数据报协议(User Datagram Protocol)
UI:单元标识(Unit Identifier)
UT: 单元类型( Unit Type)
面向服务的体系架构(SOA),
通过一系列的接口服务实现服务消费者和服务提供者间的信息交
换。本文件使用的面向服务架构应由域管理、服务管理、服务代理、服务提供者及服务消费者构成,其构
成如图1所示
在进行本地通信时,数据交互通过服务消费者和服务提供者之间的通道直接进行。在进行远程通
信时,通过本地服务代理和远方服务代理间的配合,在服务消费者和服务提供者之间建立起逻辑的数据
连接,进行服务通信。
其中域管理可采用与服务代理结合的分布式部署方式,也可采用集中式的域管理中心方式。从安
全及容错性方面考虑,建议使用分布式部署方式。
GB/T 33602—2017
style="width:12.42708in;height:4.88056in" />
图 1 面向服务的体系架构构成图
为实现面向服务体系架构的服务数据交互,本文件基于 OSI
参考模型,构建了电力系统通用服务 协议(GSP),
基于连接方式的数据交互采用TCP/IP, 基于无连接方式的数据交互采用UDP、IP
或以太
网。通用服务协议的层次结构如图2所示。
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
图 2 通用服务协议的层次结构
本标准采用了DL/T 860
的通信服务和数据结构,以及其自描述和动态维护等特性,用面向对象的 M
编码(GB/T 33603—2017)方式取代原面向数据的 ASN.1 编码方式,吸收 DL/T
476 和 DL/T 634 等高
效实时数据通信的技术特点,支持面向对象的高效实时数据通信服务。通过服务原语和报文数据结构
的自描述机制,支持预定义或自定义的创建、维护、扩充服务原语及报文数据结构(类),将简单高效的实
时数据通信服务与灵活方便的离线维护服务分离,功能互补,不相互影响。
通用服务的数据通信过程如图3所示,包含代理注册、服务注册、服务查询、服务定位等过程。
GB/T 33602—2017
style="width:12.59375in;height:6.93333in" />
图 3 通用服务交互流程图
交互流程中的关键步骤说明如下:
a)
代理注册:远程通信过程,服务代理是服务域对外的唯一出口,新增一个服务域时,应首先向域
管理进行服务代理注册,登记代理的服务域名(DomainName) 和 IP 地址;
b)
服务注册:本地通信过程,服务域内部的服务提供者应向本地服务管理注册服务,登记服务提
供者 IP 地址、端口、服务提供者标识(ProviderID)及服务名称(ServiceName)
等 ;
c)
服务查询:为服务消费者提供服务域、服务部署以及服务信息等内容,以满足服务访问的需要。
服务查询包括远程和本地通信过程;
d)
服务定位:服务消费者用于获取服务的通信地址和端口。在获取本地服务的定位信息时,定位
服务由服务管理提供,在获取远方服务的定位信息时,通过本地代理向远方代理进行服务查询
获得。
域管理位于指定区域内的服务代理后端,监控并管理所有接入该区域的服务域,其主要功能包括:
a) 管理所有服务域中服务代理的注册请求;
b) 维护服务域的DomainName 和对应服务代理 IP 地址的映射关系;
c) 监控区域内所有服务代理的运行状态;
d) 为服务消费者提供域名查询服务;
e) 对区域范围内的数据交互提供安全管控。
域管理模块宜分布部署,以对等冗余方式进行工作,可实现负载均衡。
服务管理负责管理服务域内部所有服务的注册、定位(发现)及服务信息,其主要功能包括:
GB/T 33602—2017
a) 服务提供者的服务注册及删除服务;
b) 服务提供者运行状态监视;
c) 服务列表管理及服务查询、定位功能;
d) 向域管理进行服务域(包括域名和服务代理地址)注册;
服务管理模块以对等冗余方式进行部署和工作,可实现负载均衡。
服务代理是跨服务域(含广域网或局域网)边界进行服务数据交互的唯一出口,其主要功能应包括:
a) 通过域管理获取域名和服务代理模块的通信地址;
b) 建立并维护服务消费者和服务提供者之间的链路关系;
c) 转发服务消费者的服务请求到远方代理;
d) 接收并转发远方服务消费者代理发来的服务请求到本地服务提供者;
e) 转发服务提供者的服务应答到远方代理;
f) 接收并转发远方服务提供者代理发来的服务应答到本地服务消费者。
服务代理宜分布部署,以对等冗余方式进行部署和工作,可实现负载均衡。
本标准基于面向服务的体系架构,支持请求响应式服务和订阅发布式服务两种模式:
a)
请求响应式服务适用于单次服务请求的场景,交互流程如图4所示,服务交互流程为
"-request"、"-indication"、"-response"、"-confirm"4
个典型阶段。本标准描述的大多数通用服
务为请求响应式服务。
style="width:5.91337in;height:3.79324in" />服务消费者
服务提供者
1.服务请求
(Requesl)
2.服务指示
(Indication)
4.服务确认
(Confirm)
3.服务响应
(Response)
图 4 请求响应式服务流程
b)
订阅发布式服务适用于一次提交服务注册,多次返回服务结果的场景,交互流程如图5所示,
服务原语同服务请求响应模式,典型应用如:变电站告警事件的远程订阅。
GB/T 33602—2017
style="width:5.85327in;height:4.57336in" />服务消费者
发送服务订阅请求
发布服务响应1
接收服务响应1
发布服务响应2
接收服务响应2
发布服务响应N
接收服务响应N
图 5 订阅发布式服务流程
服务的描述应采用S 语言(GB/T 33604)。
在该规范基础上,本标准的广域服务描述采用如下三段式服务名结构:
Domain.Provider.Service (参数);
Domain:
服务所属域名,用于区分服务所属服务域,通常为一个变电站或调控主站:
Provider:服务提供者标识,用于区分同一域内不同对象提供的相同服务;
Service:服务名。
本机(或本服务域)可直接引用、组合引用、嵌套引用服务原语,也可扩展服务原语:
a) 直接引用方式,服务使用者可以直接引用附录 H 中的通用服务原语。
b) 组合引用方式,服务使用者可以将附录 H
中的多个通用服务原语组合使用,形成新的服务原 语,需要创建新的服务。
c) 嵌套引用方式,服务使用者可以在自己创建的专用服务中,嵌入附录 H
中的通用服务原语,总 体形成专用服务原语,需要创建专用服务。
服务访问方式包含二进制和文本访问方式:
a) 文本访问方式:按照GB/T 33604
规定以字符串形式进行服务访问,适应于访问频率不高、对
响应时间无特殊要求的场合。
b) 二进制访问方式:按照服务编码 SC 和相应类编码 CI
直接进行二进制访问,适应于访问频率 高、响应速度快的场合。
通用二进制服务访问调用接口如下:
INT32CallService( //通用二进制服务访问调用接口
GSP ServiceRef:service,
//服务描述,包括服务域标识、提供者标识、服务编码等
GSP ProtocolUnit:protocol,//协议单元,包括协议标识、单元标识、类标识等
GSP Mode:mode, //服务模式,包括同步或异步方式、连接方式等
_
GB/T 33602—2017
GSP Buffers:buffers //服务缓冲区,包括输入、输出缓冲区的大小及指针
)
调用接口的参数由调用方式决定。服务消费者通过CallService将服务请求转换成为通信报文,传
输给服务提供者,服务提供者执行所请求的服务,将结果通过通信报文返回,由
CallService将结果传递
给服务消费者,若返回值为0表示服务执行正确,否则表示出现异常。在采用兼容模式时,所兼容的标
准服务编码内容见附录A 至附录 D。 附录 E
规定了在访问调用接口及服务定义中所使用的基本数据
类型。调用接口CallService 的参数定义见F.4,服务响应错误原因见F.4.6。
应用协议数据单元(APDU)
是通用服务协议的基本报文数据单元,由应用协议控制头(APCH) 和
应用服务数据单元(ASDU) 组成,其中 APCH
由4个八位位组组成,包含控制码(CC)、 服务码(SC)、 帧
长度(FL)。APDU 的结构如图6所示。
|
|
|
|
|
|
|
|
|||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|||||||||
|
||||||||||||
|
||||||||||||
|
|
|
|
|
图 6 应用协议数据单元结构
控制码是1个八位位组,位于APDU
的首部,控制码的结构如图7所示,含义见表1。
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|
|
|
|
|
|
图 7 控制码 CC 结构
GB/T 33602—2017
表 1 控制码CC 含义说明
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
"适用协议PI"定义了ASDU 使用的协议类型,其中PI=0
表示通用服务协议,PI为其他值时,表示兼
容模式协议。此处"兼容"是指与原通信协议功能的兼容,兼容模式如PI=2
时,可采用DL/T 634.5104 协
议服务编号(附录B)解析 APCH 的服务码 SC, 其后的帧长度 FL 为对应 DL/T
634.5104 协议 APDU
的长度。
服务码占1个八位位组,用于标识预定义服务,表2列出了本标准定义的服务,清单中包括了服务
的功能组、名称、服务码、单元类型、编码类型、类标识、连接方式等。其中:
——"功能组"和"序号"是为描述方便清晰而设置;
——"服务原语标准名称"采用英语动宾短语的形式命名,在软件程序中和服务列表中都可直接
使用;
——"服务原语中文名称"是描述性的,可在文本型服务列表中使用;
——"服务码 SC" 为该服务原语的二进制代码,当 APCH 的控制字 CC
的"适用协议"字段置为 “0000”(通用服务协议)时,其后的服务编码 SC
字段为该服务的"服务码";服务码采用分段连
续编码方式,在编码26~47区间、110~127区间和169之后留有备用,以方便扩充,服务码为
0表示不采用SC 识别的服务;
- "单元类型 UT" 为该服务所对应的数据单元类型,UT
取值从0~5,分别对应:对象单元、参数
单元、数据流单元、类描述单元、数据集扩展单元、通用宽扩展单元。详见第8章;
——"编码类型M" 指适用于该服务的报文数据结构的 M
编码方式,选择编码方式的基本原则为:
对于一次性的或临时性的服务,可采用自描述的数据编码 M1 (或 M0),
灵活方便;对于实时持 续性的服务,可采用面向对象的数据块编码 M2,
简洁高效;对于其参数为复杂数据结构的服
务,可采用能够描述对象结构的类描述编码 M3, 支持动态维护;
"类标识CI"为该服务所对应预定义数据类标识,类标识的具体描述见第8章,CI
取值见附录
GB/T 33602—2017
F,类结构定义见附录G;
——"连接方式"指该服务对低层通信连接的要求,选择连接方式的基本原则为:对于一次性的或临
时性的服务,可采用短连接,即先建立临时连接(用Associate),待该服务完成之后,再释放临
时连接(用Release);对于长期持续性的服务,可采用长连接(用
Associate),即建立连接后,长
期保持,以便随时支持后续的服务;对于广播或组播型以及测试类的服务,可采用无连接方式,
该方式的服务无需用关联(Associate)原语建立连接,但每帧报文都需携带通信地址。
其中标注"*"号的服务原语,应使用带身份标签和授权信息的调度数字证书。
表 2 电力系统通用服务协议服务码
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
GB/T 33602—2017
表 2 ( 续 )
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
|
|
|||||||
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
style="width:0.60668in;height:0.60016in" />class="anchor">GB/T 33602—2017
表 2 ( 续 )
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
12
GB/T 33602—2017
表 2 ( 续 )
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|||||||
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
GB/T 33602—2017
表 2 (续)
|
|
|
|
|
|
|
|
|
---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
当采用其他通信协议兼容模式时,其服务编码分别见:附录 A" 兼容 DL/T
860.72
号"、附录B" 兼容 DL/T 634.5104 协议的服务编号"、附录C" 兼容
GB/T18700.1(TASE.2)
服务编号"、附录 D" 兼容DL/T 476 协议的服务编号"。
协议服务编
协议的
帧长度 FL(Frame
Length)占2个八位位组,最大取值为65535,默认位序为低位在前,高位在后。
通用服务协议规定帧长度 FL 等于应用服务数据单元 ASDU 长度。
应用服务数据单元(ASDU) 紧跟在应用协议控制头部(APCH,4
个八位位组)之后,由服务数据单 元头(ASDH) 和数据单元体(ASDB)
构成,如图8所示。应用服务数据单元 ASDU 的编码规则取决于 APCH 中 CC
的适用协议PI 字段:当 PI=0 时,采用电力系统动态消息编码规范;当 PI
为其他值时,为
通信协议兼容模式,其ASDU 可直接采用原有通信规约的应用协议数据单元(APDU)
内容。
各服务根据需要采用不同的编码类型,具体参照表2中的"编码类型"。通用服务模式的
ASDB 数
据帧结构采用GB/T
比特
1
2
3
4
FL
GB/T
33603—2017 中5.2.1的内容。
|
|
|
|
|
|
|
|
||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
||||||||
|
|||||||||||
|
|
|
33602—2017
图 8 应用服务数据单元(ASDU) 结构
数据单元头部的单元标识UI(UnitID)
字段是相对固定的,其他字段在6种数据单元中的含义各不
相同。
单元标识UI 位于数据单元头的第1个八位位组,与GB/T 33603—2017 中 M
编码头部兼容,此处
采用原3个预留比特作为服务数据单元类型 UT(Unit
Type),结构如图9所示,其中编码类型 CT
(Coding Type)、单元类型 UT、 高位标志 H(High) 是必选的。
style="width:6.22014in;height:2.95347in" />
图 9 应用服务数据单元的单元标识定义
高低字节序标志 H
表示发送方计算机的字节序,大端点的计算机设置为"1",小端点的计算机设置
为“0”,接收侧据此进行字节序转换。
EF 为扩展标志(Extention Flag),扩展标志 EF
用于对类描述和头部扩展进行分类,在 M2 和 M3 时有效。 MO 和 M1
不进行头部扩展,类描述采用短描述。当 EF.7=0 时 ,ASDH 为4个八位位组的标
准数据单元头部,此时 ASDH 头部4个成员各占1个八位位组,其最大取值为256;当
EF.7=1 时 , ASDH 为8个八位位组的扩展数据单元头部,此时单元标识 UI
占1个八位位组,后续2个成员各占
2个八位位组,最后一个成员占3个八位位组;EF.6=0
时表示类描述为短描述,EF.6=1 时表示类描述
为长描述。
UT 用干表示不同的数据单元,各位取值说明见表3。
GB/T 33602—2017
表 3 数据单元头类型
|
|
|
|
|
|
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
应用服务数据单元有6种类型,为叙述方便,以下主要描述 EF.7=0
时的标准单元头部 ASDH(4、
8、12个八位位组)情况。对于EF.7=1 时的扩展单元头部 ASDH
的情况,需要将6种单元头部 ASDH
中的前4个八位位组扩充为8个八位位组,即:类标识CI、对象尺寸 OS、
对象个数OC、 参数个数PC、 属 性个数AC、 子服务SS、短序号SQ
等,由各占1个八位位组扩展为各占2个八位位组,序列编号SEQ 从
2个八位位组扩展为4个八位位组,但是,数据集扩展单元(UT=4)
头部的后4个八位位组和通用宽扩 展单元(UT=5)
头部的后8个八位位组保持不变,则其数据单元头部长度分别为8+4和8+8个八位
位组。
对象单元(UT=0),
用于传输结构化的对象数据,适用于通信双方已知服务报文数据结构的情况,
应优先使用对象单元或数据集扩展单元。在ASDU 标准头部,单元标识 UI
占1个八位位组,其中单元 类型 UT=0, 编码类型 CT=2; 类标识CI
占1个八位位组;对象尺寸 OS 占1个八位位组,表示单个对
象数据块的大小,以八位位组为单位;对象个数 OC
占1个八位位组,表示后面对象数据中包含的对象
个数。对象单元编码结构如图10所示。
| | | | | | |
|-----|-----|-----|-----|-----|-----|
4个八位位组 1个八位位组 1个八位位组 1个八位位组 1个八位位组 N
个八位位组
图 1 0 标准单元的对象单元编码结构
类标识(ClassID)位于 ASDU
标准头部的第2个八位位组,表示该服务直接对应的报文数据类的
编号,取值从0到255。类标识定义范围见表4,其中:
CI=0
表示本侧尚没有与该服务对应的报文数据类的定义,需要先传送报文数据类描述;仅用于服
务响应报文(CC 中的 Resp=1)。
CI=1
表示本侧支持与该服务对应的报文数据类的所有属性,用于服务响应报文(CC 中
Resp=1)。
CI=2~191
表示公共预定义数据类型,可离线定义,也可从在线临时定义的数据类型转存为公共
预定义数据类型,由服务管理统一维护。
CI=192~244
表示用户预定义的数据类型,可离线定义,也可从在线临时定义的数据类型转存为
用户预定义数据类型,由服务提供者自行维护。
CI=245~255
表示用户临时定义的数据类型,其生命周期为一次完整的服务请求响应过程,应先
style="width:1.27346in" />
style="width:1.27346in" />
style="height:0.53328in" />
style="height:0.5533in" />
使用类描述单元(UT=3,CT=3)
传输类描述,再用对象单元(UT=0,CT=2)
表 4 类标识定义
GB/T 33602—2017
等传输对象数据。
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
对象数据结构如图11所示,其中的对象尺寸 OS 通过类定义获得。
| | |
|-----|-----|
OS 个八 OS 个八 | OS 个八 |
---|---|
|
位位组 |
图 1 1 对象数据结构
对象单元 ASDH 中的对象尺寸 OS、 对象个数 OC、 帧长度 FL,
有3种组合模式:
一是正常多对象模式。帧长度 FL= 对象尺寸 OS* 对象个数 OC+ASDU 头长。
注:其中 ASDH 长又有多种取值,对于标准 ASDH,
其长可能为4、8、12个八位位组,对于扩展 ASDH, 其长可能为
8、12、16个八位位组;以下与此相同。
二是单个超大对象模式。当对象尺寸超过255个八位位组或对象长度无法预先确定时,可将
OS
置为0,OC 置为1,则:超大对象长度=帧长度 FL-ASDU 头长。
三是用户自定义头部模式。用户应优先选用本标准规定的6种服务数据单元,其中留有相当大的
扩展余地,当仍不满足需求时,用户可自定义头部数据结构,插在标准的对象单元头部
ASDH 和对象数
据之间,如图12所示。此时,用户自定义头部的长度只能隐式表达,可由下式计算导出:
用户自定义头部长度=帧长度 FL- 对象尺寸 OS* 对象个数 OC+ASDH 长。
|
|
|
|
---|
4个八位位组
4、8、12个
八位位组
N 个八位位组 (对象大小*对象个数)个八位位组
图 1 2 标准单元的自定义用户头部的对象单元结构
参数单元(UT=1), 用于传输各类服务的参数数据。在标准 ASDH 中,单元标识UI
占1个八位位 组,其中单元类型UT=1, 编码类型CT=0 或1,分别表示采用兼容
ASN.1(M0) 或带名字 ASN.1 编码 方式(M1); 子服务
SS(Sub-Service),为服务码 SC
的扩展,其编码和含义由服务提供者定义;短序号 SQ
占1个八位位组,取值范围从0到255,达到最大值255后自动归0;在发送报文中表示本数据包在缓冲
区中的相对报文序号,在接收确认报文中表示正确接收到的相对报文序号。参数个数
PC 占 1 个 八 位
位组,表示该报文中包含的参数个数。参数单元编码结构如图13所示。
GB/T 33602—2017
|
|
|
|
|
|
---|
4个八位位组 1个八位位组 1个八位位组 1个八位位组 1个八位位组 N
个八位位组
图 1 3 参数单元头编码结构
参数数据采用 TLV 编码方式,或 N-TLV 编码方式。 N-TLV
上加入名字一项,名字以 ASCI 值为0的字符结束,采用 N-TLV
所示。
编码方式即在 TLV 编码方式的基础
编码方式的参数数据结构如图14
|
|
|
|
|
---|
多个八 | 1个八 1个八 L个八 |
|
1个八 1个八L个八 |
---|---|---|---|
位位组 |
|
|
|
图 1 4 采 用 N-TLV 编码方式的参数数据结构
流数据单元(UT=2),
用于传输多帧流式数据,如大文件或图像等。标准单元的流数据编码结构
见图15所示。在ASDU 标准头部,单元标识UI
占1个八位位组,其中单元类型UT=2, 可不使用编码 类型;子服务
SS(Sub-Service), 为服务码 SC
的扩展,其编码和含义由服务提供者定义。相对序号 SEQ
占2个八位位组,取值范围从0~65535,达到最大值65535后自动归0;在发送报文中表示本数据包在
缓冲区中的相对报文序号,在接收确认报文中表示正确接收到的相对报文序号。
APCH 帧头 |
|
|
|
---|---|---|---|
|
|
|
|
图 1 5 标准单元的流数据单元结构
数据流的传输方法如下;
a)
数据发送方根据关联时协商的流数据切片长度及确认窗口大小,进行数据包的组织和发送,对
每帧数据赋予 一个发送序号(SEQ 或 SQ),
发送序号连续递增,达到最大值后,自动归0;
b)
数据发送方每发送等于确认窗口的数帧数据包后,等待数据接收方应返回确认信息;
c)
数据接收方每接收等于确认窗口的数帧数据包后,应发送接收确认报文,其序号
SEQ ( 或 SQ) 表示已正确收到第 SEQ ( 或 SQ) 号报文;
d)
数据发送方从接收方收到确认报文后,释放发送缓冲区,继续发送,直到送满确认窗口,或完成
全部数据发送。
在使用流数据方式传输时,可按照实际传输需求,合理设置需要传送的信息切片长度及确认窗口大
小,具体可在关联服务中进行协商。若未进行协商设置,则默认切片长度为1024个八位位组,确认窗口
大小为8。
为了提高数据传输效率,减少网络数据分包,建议包含流数据包的 APDU
加上代理头部12个字节
后的大小不超过当前网络传输最大传输单元(MTU) 值 。
类描述单元(UT=3), 用于描述报文数据结构或数据类。在 ASDU
标准头部,单元标识UI 占 1 个
八位位组,其中单元类型 UT=3, 编码类型 CT=3; 类 标 识CI
为所描述的数据类分配标识,详见参数单
元中的CI 描述;类尺寸 CS
为所描述的数据类编译后的二进制尺寸,推荐使用长字(4个八位位组)对齐
GB/T 33602—2017
和紧凑编译;属性个数AC
表示所描述类包含的原子属性个数,推荐采用扁平化无嵌套的报文数据结
构。类描述单元应与6.2.2中创建类服务(CreateClass)、获取类服务(GetClass)配合使用,可以预先定
义类,也可以由通信双方动态定义数据类。标准单元的类描述单元编码结构见图16所示。
|
|
|
|
|
|
---|
4个八位位组 1个八位位组 1个八位位组 1个八位位组 1个八位位组 N
个八位位组
图16 标准单元的类描述单元结构
类描述数据详细结构如图17所示。
|
|
|
|
|
|
---|
多个八 |
|
|
|
1个八 1个八 |
---|---|---|---|---|
位位组 |
|
|
|
|
图17 标准单元的类描述数据结构
数据集扩展单元(UT=4),
主要用于传输成组的结构化对象数据,适应于通信双方已知服务报文
数据结构和数据集(通信索引表)的情况,但作为 ASDU
头部扩展4个八位位组的通用模式,也可支持
非数据集类的其他服务,应优先使用对象单元或数据集扩展单元。在ASDU
标准头部,单元标识UI 占 1 个八位位组,其中单元类型 UT=4, 编码类型 CT=2;
类标识CI、类尺寸 OS 和对象个数 OC 的含义 与在对象单元中相同;ASDU
头部共增加了4个八位位组:数据集标识 DS (或频道 CH) 占1个八位位
组,子服务标识SS 占1个八位位组,相对序列号 SEQ
占2个八位位组,数据集扩展单元结构如图18。
|
|
|
|
|
|
|
|
|
---|
4 个 1 个 1个 1 个 1 个 1 个 1个 2个 N 个
八位位组 八位位组 八位位组 八位位组 八位位组 八位位组 八位位组
八位位组 八位位组
图18 标准单元的数据集扩展单元结构
数据集(索引表)标识DS 用以区分不同的数据集合,DS=1
表示接收遥测索引表,DS=2 表示接收 遥信索引表,DS=3
表示接收遥控索引表,DS=4 表示接收遥调索引表,DS=5 表示发送遥测索引表,
DS=6 表示发送遥信索引表,DS=7 表示发送遥控索引表,DS=8
表示发送遥调索引表;其他编码留作
扩充。在非数据集类的其他服务中,该字段为频道 CH,
占1个八位位组,表示逻辑的通信渠道,可用于
服务代理之间长连接的分享管理,或无连接情况下分频道组播,其值由服务提供者定义。
数据索引表的内容至少包括:顺序号、数据点标准名称、数据点本地标识等,其中的顺序号和数据点
标准名称必须在通信双方之间保持一致;数据点本地标识(一般为数据库地址)仅由本侧使用,不需传给
对侧。
子服务 SS 为服务码 SC 的扩展,当与数据集单元配合使用时,SS=0
表示变化数据传送,SS=1 表
示全数据传送,其他编码和含义由服务提供者定义。在非数据集的其他服务中,该字段可由服务提供者
定义。
相对序列号 SEQ 在数据集全数据传送子服务(SS=1)
时,表示本帧数据在数据集(索引表)中的起
始位置序号;其他情况下与流数据单元中的 SEQ
相同,在发送报文中表示本数据包在缓冲区中的相对
报文序号,在接收确认报文中表示正确接收到的相对报文序号,当SEQ
达到最大值65535后自动归0。
GB/T 33602—2017
通用宽扩展单元(UT=5), 作为 ASDU
头部扩展8个八位位组的通用模式可支持多种服务,在通
用宽扩展单元标准头部与对象数据之间,预留8个八位位组作为对象数据信息扩展使用。其中:通用宽
扩展单元标准头部定义同对象单元的 ASDU 标准头部定义;频道 CH
占1个八位位组,表示逻辑的通
信渠道,可用于服务代理之间长连接的分享管理,或无连接情况下分频道组播,其取值可由服务提供者
定义;子服务 SS (占1个八位位组)和序号 SEQ
(占2个八位位组)的定义与对象数据集单元中相同;预 留扩展EX
占4个八位位组,为服务提供者预留,其具体结构和含义由服务提供者定义。通用宽扩展单
元结构如图19所示。
|
|
|
|
|
|
|
---|
4个
八位位组
4个
八位位组
1个
八位位组
1个
八位位组
2个
八位位组
4个
八位位组
N个八位位组
图19 标准单元的通用宽扩展单元结构
通信双方所交换的数据类型为基本数据类型,且数据个数较少的情况下可采用参数数据单元进行
数据交换。在应用服务数据单元中将每个交换的数据描述信息与数据值都包含在内。以关联服务请求
为例,其具体参考格式如图20所示:
|
|
|
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
图20 简单类型数据交换的 APDU (标准单元)
通信双方所交换的数据为单一数据类型或结构性数据,且其类型包含在公共类里面时可采用对象
单元进行数据的交换和解析。
由于公共数据类型是双方都已知的,交换时可以直接使用类型标识CI
作为双方的编解码依据。以
注册事件(RegisterEvent)请求为例,具体参考格式如图21所示,其中CI=13
为公共数据类型:
|
|
|
|||||||
---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
图 2 1 公共数据类型交换的 APDU (标准单元)
GB/T 33602—2017
通信双方所交换的数据为单一数据类型或结构性数据,但不包含在公共类里面时,通信双方可通过
类管理服务定义或交换类定义,然后使用相应的类标识CI
进行服务数据的的交换和解析。
自定义的数据类由服务端使用CreateClass创建新的数据类定义,在创建后客户端可通过
List-
Classes服务获取到当前服务所有相关类的列表,使用GetClass
服务可获取指定数据类的描述信息。
常见的自定义数据交换分为以下两种应用情况:
a)
用户预定义的数据类:服务端先使用CreateClass为服务创建新的数据类定义,类标识范围为
该服务下的192~244(依据表4定义内容),在创建后客户端可通过 ListClasses
服务获取到当 前服务所有相关类的列表,使用 GetClass
服务可获取指定数据类的描述信息,并可在后续的
服务请求、响应中使用该数据类实例化的对象单元直接进行数据交换;
b)
用户临时定义的数据类:服务端在响应客户端请求时临时创建符合客户端要求的数据类定义
并在本次会话中使用,类标识范围为该服务下的245~255(依据表4定义内容),服务端先使
用类描述单元告知数据接收方后续数据类的定义信息,再使用对象数据单元直接进行数据
交换。
通信双方在进行比较复杂的数据交换时,如文件传输等,难以使用一个类表达的服务时,可使用流
数据单元进行数据交换。
在使用数据流传输服务时,数据流的编码方法通过数据流单元的子服务(SS)
参数进行约定。流数
据的编解码应依据服务参数的S 描述实现。
流数据交换服务的过程如下:
a) 在服务的 Request 过程,逐个对 IN
参数,按照参数的编码方法把数据编码后,通过简单的按顺
序合并形成请求服务的数据流;
b) 在服务的Indication 过程则按照Request 的逆向进行解码;
c) 在服务的 Response 过程,逐个对 OUT
参数,按照参数的编码方法把数据编码后,通过简单的
按顺序合并形成服务响应数据流;
d) 在服务的 Confirm 过程则按照Response 的逆向进行解码。
服务消费者、服务代理和服务提供者间的交互过程包括关联(Associate)、服务传输、主动释放(Re-
lease)或中止关联(Abort)、 通信异常处理。
关联
Associate是指服务消费者到服务提供者之间的端到端的连接,包括本地服务关联、通过代理
的远方服务关联。关联过程包含底层的套接字(Socket)层面的连接,包含安全认证过程。关联的建立
是在每个服务交互过程隐含的,即在每次服务会话时建立关联,会话结束时根据情况应释放关联,由客
户端通知服务端,服务端释放与关联有关的资源。服务端应为每个已建立的关联创建一个定时器,如果
长时间未收到客户端的服务请求,视为会话已结束,并释放有关的资源。如果客户端需要长时间保持关
联,应定时发送 Test
请求。如果检测到通信异常或服务端拒绝释放关联,应使用Abort 服务中止关联。
关联建立过程中的关键技术点说明如下:
GB/T 33602—2017
a) 服务关联 Associate的建立 服务关联的建立原则如下:
1) 在一对客户、服务端之间,当使用SC 的服务时,可共享一个
AssociateID,系统设立特定 As- sociateID供使用SC 的服务共享,若不使用SC
的服务,每个服务对应一个 AssociatelD;
2)
通信关联关系谁建谁拆,连接发起者负责链路的保持和销毁,服务端只在链路长期未收到
数据时通过 Abort 终止关联。
b) 长连接和短连接服务交互过程
服务的长连接通过 Associate和 Release显式建立,短连接的 Associate和
Release采用隐式建
立。具体方法是:
1) 在需要长连接时需在服务传输过程前通过 Associate
建立链接,在过程中通过 test 维持 链接,在结束时用Release拆除链接;
2) 只需短连接时,在服务调用前不做任何关联操作;
3)
在服务调用时(包括长、短连接),首先判断是否已有链接(关联),如果没有则使用
Associate建立链接,并在收到返回后用Release拆除链接。如果在服务调用时发现已经
有链接则直接使用已有链接,不做任何关联操作。
c) 无连接服务交互过程
无连接服务适用于广播或组播型的服务,以及测试维护型的服务。该类服务低层协议采用无连接
的通信协议(如:以太网、IP、UDP
等),不需建立连接,但每帧报文都需带收发地址,可采用频道(CH) 机
制优化支持分组广播型服务。典型应用如:变电站的采样值服务用以太网协议广播发送。
服务代理交互用于支持跨服务域的关联的建立,实现链路的管理、服务请求和服务应答的转发。服
务代理可通过在 APDU 之前增加包含关联
ID(AssociatelD)的代理帧头的方式来实现。代理帧头结构
见附录 F 的 F.3。 关联 ID 包括全局和局部两种,全局
AssociatelD在端到端的范围内保持唯一,局部
style="width:11.76389in;height:7.46944in" />
图22 服务代理交互过程图
GB/T 33602—2017
图中客户端 A 与客户端B 共同使用服务代理X 与远方服务通信,客户端 C
单独使用服务代理 Y 与远方服务通信,服务代理Z 为服务端的服务代理。 As*
表示各个客户端与服务代理之间,服务代
理与服务代理之间,服务代理与服务端之间建立的
Associate关联;实粗线表示为实际 socket连接,虚
细线表示为关联关系。服务代理之间的实际 socket 连接中可能会存在多个
Associate 关联(即共享 TCP
连接),服务代理与客户端或服务代理与服务端之间的实际
socket连接中只存在一个 Associate关
联(即独享TCP
连接);关联对应表为服务代理中存在的映射表,用来锁定连接关系。其交互过程如下:
a) 建立 Associate关联
服务关联过程的详细流程见图23所示,以客户端 A 连接服务端B
作为例子来说明其过程:
1) 客户端 A 向客户端以目的服务的三段式服务名为参数,向代理 X
发关联请求,客户端代 理 X 产生值为 CA-As1 的 AssociateID,并记录此 ID
到关联对应表当中,并用来标记客户 端 A;
2) 客户端服务代理 X 解析目的服务的 DomainName,
并通过域管理获取对应域代理服务 Z 的 IP
地址;判断与其是否存在物理连接,如果不存在,则建立物理连接;
3) 代理 X 将为收到的关联数据帧加代理帧头,并将代理帧头的 AssociateID
设为 CA-Asl 后发送给代理 Z;
4) 代理 Z 产解析代理帧头CA-Asl, 生成值CA-As2 (在使用全局 AssociateID
时 CA-As2 值 直接使用CA-Asl 的值)的 AssociateID,记录 CA-Asl 与 CA-As2
的关联关系;
5) 代理Z 去代理帧头,解析服务参数并以本地客户端的形式,通过
Associate的 ProviderID 和 ServerID参数建立与服务 B 的关联关系,服务 B
产生值为 CA-As3 并通过 Associate 的 AssociateID参数返回CA-As3 给代理
Z;
6) 代理 Z 接收到服务 B 返回的建立链路成功帧,将 CA-As3 和当前与服务
Bsocket 连接参 数一并记录到关联对应表中,与 CA-As2 构成CA-As2、CA-As3
以及 socket关联关系;
7) 代理Z 将建立链路成功帧中返回的 Associate 的
AssociateID参数由CA-As3 替换为CA- As2,然后添加 CA-As1
到代理帧头上,发送给代理X;
8) 代理 X 接收到代理 Z 返回的建立链路成功帧,解析出 CA-As1 和 CA-As2,
然后将 CA- As1 和 CA-As2 记录到本代理中的关联对应表中;
9) 代理X 将收到返回数据包去掉添加的代理帧头,并将 Associate的
AssociateID 参数值由 CA-As2 替换为CA-As1 后发送给客户端 A;
10)客户端A 接收到代理X 返回的建立链路成功帧,记录当前的CA-As1,
通知上层应用链路
以建立成功。
GB/T 33602—2017
style="width:12.44028in;height:6.29375in" />
style="width:12.44028in;height:6.29375in" />
style="width:12.44028in;height:6.29375in" />
style="width:12.44028in;height:6.29375in" />
图23 跨域服务关联过程流程图
b) 服务传输
在建立好关联关系后,客户端和服务端服务之间才能进行服务数据传输,以客户端B
访问服务端 B
的服务为例,其通信过程如下:
1) 客户端B 向代理 X 发送数据服务访问帧,代理 X 接收到客户端 B
的访问请求,根据客户 端 B 的标记CB-Asl 通过关联对应表来寻找代理 Z 的
CB-As2, 然后将以 AssociateID 为 CB-As2
的代理帧头添加到数据服务访问帧头部,发送给代理Z;
2) 代理 Z 接收到代理 X 的数据服务访问帧,解析代理帧头,获得 CB-As2,
通过关联对应表 来寻找与其对应服务B 的连接;代理Z
将帧头去掉,然后通过关联CB-As3 的 socket 转发 数据服务访问帧给服务 B;
3) 服务 B 接收到数据服务访问帧后,返回数据服务访问结果帧给代理 Z;
4) 代理Z 根据端口 Port2 和关联 CB-As3 通过关联对应表,寻找关联
CB-As2, 然后将以 As- sociateID为 CB-As2
的代理帧头添加到数据访问结果帧头部,发送给代理X;
5) 代理 X 接收到数据访问结果帧,解析代理帧头,获取 CB-As2,
根据关联对应表,寻找到 CB-As1; 代理 X
去掉帧头,将数据访问结果帧通过关联 CB-As1 发送给客户端 B, 同时复
位此对关联的生命值。
c) 主动释放和终止关联
客户端与服务端通信结束或者需要中止,则发送 release 和 abort
帧,以客户端 C 和服务端 B 通信
为例,并以发送 release 帧为例:
1) 客户端C 向代理Y 发送 release帧,代理Y 接收到客户端C
的访问请求,根据客户端C 的 标记CC-As1 通过关联对应表来寻找代理 Z 的
CC-As2, 然后将 AssociateID 为 CC-As2 的代理帧头添加到 release
帧头部,发送给代理 Z;
2) 代理Z 接收到代理 Y 的 release帧,解析帧头,获得 CC-As2,
通过关联对应表来寻找与其 对应服务 B 的连接;代理 Z
将帧头去掉,然后通过关联 CC-As3、 端口 Port3 转发 release 帧给服务 B;
3) 服务 B 接收到 release帧后,返回关联释放确认帧给代理 Z;
GB/T 33602—2017
4) 代理Z 根据端口 Port3和关联 CC-As3 通过关联对应表,寻找关联CC-As2,
然后将 CC- As2 添加到关联释放确认帧头部,发送给代理Y; 代理 Z 删除
CC-As3 的关联,删除端口
Port3上的物理连接,同时删除关联对应表上的记录;
5) 代理Y 接收到关联释放确认帧,解析帧头,获取 CC-As2,
根据关联对应表,寻找到 CC- Asl;代理 Y
去掉帧头,将数据访问结果帧通过关联 CC-As1 发送给客户端 C; 代理 Y 删
除关联对应表中的数据,然后检测代理 Y 与代理Z 之间是否还存在
Associate关联,如果 不再存在,则删除代理 Y 和代理 Z 之间的物理连接;
6) 客户端 C 接收到关联释放确认帧,释放客户端 C 和代理 Y
之间的物理连接;
7)
通信流程中,省略了超时计时,超时计时与a)建立关联时的超时计时相同,不再重复;对
于abort命令,直接结束当前的操作,不等待当前操作完成,其通信流程与
release 相同, 不再重复。
d) 通信异常处理
通信通道异常等都会造成交互的中断导致关联失效,在通信过程中应采取相应措施,应包含的处理
要求如下:
1)
在各环节采用生命计数器进行对通信过程进行监视,在超出预期时间后应采取相应措施,
恢复通信并告警;
2) 通信空闲时发送测试帧监视通道和服务是否正常;
3) 在异常发生时,应尽可能发出 abort命令,通知相关服务释放资源;
4) 应设置关键资源使用情况监视,以发行异常资源消耗。
GB/T 33602—2017
(规范性附录)
兼容 DL/T 860.72 协议服务编号
根据电力系统通用服务协议编码规则对 DL/T 860.72
中的抽象通信服务接口进行服务编号,详见
表 A.1。
表 A.1 DL/T 860.72 服务编号
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33602—2017
表 A.1 ( 续 )
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33602—2017
(规范性附录)
兼容 DL/T 634.5104 协议服务编号
根据电力系统通用服务协议编码规则对 DL/T 634.5104
中常用的类型标识进行服务编号,详见
表 B.1。
表 B.1 DL/T 634.5104 服务编号
|
|
|
|
|
---|---|---|---|---|
|
|
|
|
|
|
|
|||
|
|
|
||
|
|
|||
|
|
|
||
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33602—2017
表 B.1 ( 续 )
|
|
|
|
|
|
---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
![]() |
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
||
|
|
|
|
GB/T 33602—2017
(规范性附录)
兼容 GB/T 18700.1 协议服务编号
根据电力系统通用服务协议编码规则对 GB/T18700.1
中的服务接口进行服务编号,详见表 C.1。
表 C.1 GB/T 18700.1 服务编号
|
|
|
|
|
---|---|---|---|---|
|
|
|
![]() |
|
|
|
|
||
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
|
|
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
GB/T 33602—2017
表 C.1 ( 续 )
|
|
|
|
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33602—2017
(规范性附录)
兼容 DL/T 476 协议服务编号
根据电力系统通用服务协议编码规则对 DL/T476
中的数据块进行服务编号,详见表 D.1。
表 D.1 DL/T 476 服务编号
|
|
|
|
|
|
|
---|---|---|---|---|---|---|
|
|
|
|
|
||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
![]() |
|
||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
GB/T 33602—2017
表 D.1 ( 续 )
|
|
|
|
|
|
|
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
|
|||
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
||||
|
|
|
GB/T 33602—2017
表 D.1 ( 续 )
|
|
|
|
|
|
|
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
||||
|
GB/T 33602—2017
(规范性附录)
基本数据类型定义
电力系统通用服务协议中所使用到的基本数据类型的定义见表 E.1。
表 E.1 基本数据类型定义
|
|
|
|
|
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0~2** 64-1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33602—2017
(规范性附录)
基本数据结构定义
F.1 概述
电力系统通用服务协议中单元头部结构的定义如下,采用C
语言格式进行描述,应使用长字(4个
八位位组)对齐和紧凑编译。
F.2 单元头部结构定义
F.2.1 GSP ControlCode(协议控制码)
//协议控制码定义
typedef struct GSP control code {
INT8U protocol:4; //协议标识PI,4位,为0表示通用服务协议 GSP;
INT8U spare:1; //备用, 1位;
INT8U error:1; //错误标志,1位,0表示无错,1表示有错;
INT8U response:1; //响应标志,1位,0表示请求,1表示响应;
INT8U next:l; //后续标志,1位,0表示无后续帧,1表示有后续帧;
}GSP ControlCode;
F.2.2 GSP APCH (应用协议控制帧头)
//应用协议控制帧头结构
typedef struct GSP application protocol control header {
GSP ControlCode CC; //协议控制,CC;1 个八位位组;
INT8U service; //服务码,SC; 1 个八位位组;
INT16U lenth; //帧长度,FL= 等于ASDU 长度; 2个八位位组;
GSP APCH;
_
F.2.3 GSP UnitID(服务数据单元标识)
//服务数据单元标识定义
typedef struct GSP application service data unit ID {
INT8U
INT8U
INT8U
INT8U
GSP UnitID;
codeType:2; / / 编 码 类 型 ,CT,2 位,对应:M0,M1,M2,M3;
unitType:3; //单元类型,UT,3 位,
//对应:对象0,参数1,流2,类3,数据集4,宽扩展5;
extFlag:2; //扩展标志,EF,2 位,b7=0 不扩展,b7=1 为扩展;
highFlag:1; //高字节序标志,H,1 位,0表示低序,1表示高序;
F.2.4 GSP ASDH Object (对象单元头部结构)
//对象单元头部结构(UT=0)
GB/T 33602—2017
typedef struct GSP service data unit header for object {
GSP APCH
_
GSP UnitID
_
INT8U
INT8U
INT8U
APCH;
unitID;
classID;
objectSize;
objectCount;
//通用服务协议头,APCH;4 个八位位组;
//单元标识,UI;1 个八位位组;
//类标识,CI; 1 个八位位组;
//对象尺寸,OS;1 个八位位组;
//对象个数,OC;1 个八位位组;
}GSP ASDH Object;
F.2.5 GSP ASDH Parameter (参数单元头部结构)
//参数单元头部结构(UT=1)
typedef struct GSP service data unit header for parameter {
GSP APCH APCH; / / 通 用 服 务 协 议 头 ,APCH;4 个八位位组;
GSP UnitID unitID; / / 单 元 标 识 ,UI; 1 个八位位组;
_
INT8U subService; //子服务,SS; 1 个八位位组;
INT8U shortSequence; //短相对序号,SQ;1 个八位位组;
INT8U parameterCount;// 参数个数,PC; 1 个八位位组;
}GSP ASDH Parameter;
F.2.6 GSP ASDH Flow (流数据单元头部结构)
//流数据单元头部结构(UT=2)
typedef struct GSP service data unit header for flow {
GSP APCH APCH;
_
GSP UnitID unitID;
INT8U subService;
INT16U sequence;
}GSP ASDH Flow;
//通用服务协议头,APCH;4 个八位位组;
//单元标识,UI; 1 个八位位组;
//子服务,SS;1 个 八 位 位 组 ;
//长相对序号,SEQ;2 个八位位组;
F.2.7 GSP ASDH Class (类描述单元头部结构)
//类描述单元头部结构(UT=3)
typedef struct GSP service data unit header for class {
GSP APCH
_
GSP UnitID
INT8U
INT8U
APCH;
unitID;
classID;
objectSize;
//通用服务协议头,APCH;4 个八位位组;
//单元标识,UI;1 个八位位组;
//类标识,CI; 1 个八位位组;
//对象尺寸,OS;1 个八位位组;
INT8U attributeCount; //属性个数,AC;1 个八位位组;
}GSP ASDH Class;
F.2.8 GSP ASDH DataSetExt (数据集扩展单元头部结构)
//数据集扩展单元头部结构(UT=4)
typedef struct GSP service data unit header for dataset ext {
GSP APCH APCH; //通用服务协议头,APCH;4 个八位位组;
_
GSP UnitID unitID; //单元标识,UI; 1 个八位位组;
_
INT8U classID; //类标识,CI; 1个八位位组;
GB/T 33602—2017
INT8U |
|
|
---|---|---|
INT8U |
|
|
INT8U |
|
|
INT8U |
|
|
INT16U |
|
|
}GSP ASDH DataSetExt;
F.2.9 GSP ASDH GeneralWideExt
(通用宽扩展单元头部结构)
//通用宽扩展单元头部结构(UT=5)
typedef struct GSP service data unit header for general wide ext {
GSP APCH
_
GSP UnitID
INT8U
INT8U
INT8U
INT8U
INT8U
INT16U
INT32U
APCH;
unitID;
classID;
objectSize;
objectCount;
channel;
subService;
sequence;
userExt;
//通用服务协议头,APCH;4 个八位位组;
//单元标识,UI; 1 个八位位组;
//类标识,CI;1 个 八 位 位 组 ;
//对象尺寸,OS; 1 个八位位组;
//对象个数,OC; 1 个八位位组;
//频道,CH; 1个八位位组;
//子服务,SS; 1个八位位组;
//长相对序号,SEQ;2 个八位位组;
//用户扩展; 4个八位位组;
}GSP ASDH GeneralWideExt;
F.3 代理帧头结构
代理帧头是为了方便实现代理逻辑关系时用以标识关联关系的数据头,可在服务代理之间的
APDU
之前加12个八位位组;当采用网络地址转换方式实现时,不需增加代理帧头。其结构如下:
//代理帧头结构
typedef struct GSP proxy head {
INT64U associateID; //关联 ID
INT16U jumpNum; //跳数
INT16U reserved; //保留
}GSP ProxyHead;
注 1 : associateID生成原则,由服务消费者端服务代理的外部 IP
地址和序列号组成,各占4个八位位组,其中高
32比特为 IP 地址,低32比特为序列号。
注2:头部结构采用小端点字节序。
F.4 服务调用参数
F.4.1 GSP ServiceRef(服务描述)
//服务描述
typedef struct GSP service reference{
STRING DomainID; //服务域标识
STRING ProviderID; //服务提供者标识
STRING ServicelD; //服务标识
GB/T 33602—2017
INT8U ServiceCode; //服务编码 SC
INT8U SubService; //子服务码 SS
STRING * ServiceDesc; //服务的 S 语言描述指针
}GSP ServiceRef;
F.4.2 GSP ProtocolUnit(协议单元)
//协议单元
typedef struct GSP protocol unit{
INT8U ProtocolID; //协议标识PI
INT8U UnitType; //单元类型UT:0 对象,1参数,2流,3类描述,4数据集,5扩展
INT8U CodeType; //编码类型 CT:M0、M1、M2、M3
INT8U ClassID; //类标识CI
INT8U ObjectSize; //对象尺寸 OS
INT8U OjbectCount; / / 对 象 个 数 OC
INT8U ParameterCounter;//参数个数 PC
INT8U ClassSize; //类尺寸CS
INT8U AttributeCounter;//属性个数 AC
INT8U DataSet; //数据集 DS
INT8U Channel; //频道CH
INT32U Extend; //扩展预留 EX
}GSP ProtocolUnit;
F.4.3 GSP Mode (服务模式)
//服务模式
typedef struct
INT8U
INT8U INT8U
INT8U
INT32U
}GSP Mode;
GSP service mode{
GSP Asyn;
GSP Link;
GSP ExtFlag;
GSP Resl;
_
GSP Res4;
//0:同步服务方式;1:异步服务方式
//0:短连接;1:长连接;2:无连接
//报头扩展标志 EF,0:标准,1:扩展
//保留备用1个八位位组
//回调函数入口地址索引
F.4.4 GSP Buffers(服务缓冲区)
//服务缓冲区
typedef struct INT16U
V(ID
INT16U
VOID
GSP service data buffers{
InDataSize;
OutDataSize;
|
|
---|
}GSP Buffers;
F.4.5 GSP ServiceCode ( 服 务 编 码
)
//服务编码
GB/T 33602—2017
typedef enum {
SC Abort=2,
_
SC Release=3,
_
SC CreateService=4,
SC DeleteService=5,
SC RegisterService=6,
SC CancelService=7,
_
SC AliveServiceState=8,
_
SC ListServices=9,
SC GetService=10,
SC LocateService=11,
SC ListProvidersofDomain=12,
_
SC ListProvidersofService=13,
_
SC GetServiceState=14,
SC GetDomainName=15,
SC SetDomainName=16,
_
SC DomainRegister=17,
SC DomainAliveState=18,
_
SC DomainRegistManage=19,
SC ListDomainName=20,
SC LocateProxy=21,
SC CreateClass=22,
_
SC GetClass=23,
SC DeleteClass=24,
SC ListClasses=25,
SC GetDataValues=48,
_
SC SetDataValues=49,
_
SC GetDataDirectory=50,
SC GetDataDefinition=51,
SC GetDataSet=52,
_
SC SetDataSet=53,
_
SC CreateDataSet=54,
_
SC DeleteDataSet=55,
SC CheckDataSet=56,
SC GetDataSetDirectory=57,
SC GetDataSetValues=58,
_
SC SetDataSetValues=59,
SC ListDataSets=60,
SC RegisterEvent=61,
SC SubscribeEvent=62,
SC SendEvent=63,
_
SC CancelEventReg=64,
//关联
//中止
//释放
//创建服务
//删除服务
//注册服务
//取消服务
//服务状态(心跳)报告
//获取服务列表
//获取服务信息
//服务定位
//特定服务域内的服务提供者查询
//特定服务部署位置查询
//获取服务状态
//获取域名
//设置域名
//域注册
//服务域状态(心跳)报告
//域注册管理
//域名查询
//代理定位
//创建服务相关类
//获取服务相关类
//删除服务相关类
//获取服务相关类列表
//读数据值
//设置数据值
//读数据目录
//读数据定义
//读取数据集
//设置数据集
//生成数据集
//删除数据集
//校验数据集
//读取数据集目录
//读取数据集的数据值
//发送数据集的数据值
//获取数据集列表
//注册事件
//订阅事件
//事件推送
//取消事件注册
SC QueryEvent=65,
SC ListEvents=66,
SC CancelEventSub=67,
SC Select=68,
_
SC SelectWithValue=69,
_
SC Cancel=70,
_
GB/T 33602—2017
//查询事件
//获取事件列表
//取消事件订阅
//选择
//带值选择
//取消
SC Operate=71, //执行
SC CommandTermination=72, //命令终止
SC TimeActivedOperate=73, //时间激活操作
SC TimeActivatedOperateTermination=74,//操作控制
SC OperateControl=75, //操作控制
SC GetSequenceList=76,
SC SequenceControl=77,
SC SequenceStepControl=78,
SC GetTime=79,
_
SC GetServerDirectory=80,
SC GetLogicalDeviceDirectory=81,
SC GetLogicalNodeDirectory=82,
SC GetAllDataValues=83,
SC SelectActiveSG=84,
_
SC SelectEditSG=85,
_
SC SetEditSGValue=86,
_
SC ConfirmEditSGValues=87,
_
SC GetEditSGValues=88,
_
SC GetSGCBValue=89,
SC Report=90,
SC GetBRCBValues=91,
SC SetBRCBValues=92,
_
SC GetURCBValues=93,
_
SC SetURCBValues=94,
SC GetLCBValues=95,
_
SC SetLCBValues=96,
_
SC QueryLogByTime=97,
SC QueryLogAfter=98,
SC GetLogStatusValues=99,
SC SendGOOSEMessage=100,
SC GetGOOSEElementNumber=101,
SC GetGoCBValues=102,
_
SC SetGoCBValues=103,
_
SC SendMSVMessage=104,
SC GetMSVCBValues=105,
_
SC SetMSVCBValues=106,
_
SC SendUSVMessage=107,
//查询操作票列表
//序列控制
//序列单步
//获取时间
//读服务器目录
//读逻辑设备目录
//读逻辑节点目录
//读所有数据值
//选择活动定值组
//选择编辑定值组
//写编辑定值组值
//确认编辑定值组值
//读编辑定值组值
//读定值组控制块值
//报告
//读缓存报告控制块值
//设置缓存报告控制块值
//读非缓存报告控制块值
//设置非缓存报告控制块值
//读日志控制块值
//设置日志控制块值
//按时间查询日志
//查询某条目以后的日志
//读日志状态值
//发送GOOSE 报文
//读GOOSE 元素数目
//读GOOSE 控制块值
//设置GOOSE 控制块值
//发送 MSV 报文
//读 MSV 控制块值
//设置 MSV 控制块值
//发送 USV 报文
GB/T 33602—2017
SC GetUSVCBValues=108,
_
SC SetUSVCBValues=109,
_
SC GetFile=128,
_
SC SetFile=129,
_
SC DeleteFile=130,
_
SC GetFileAttributeValues=131,
_
SC ListFiles=132,
_
SC GetDirectory=133,
SC GetBySql=134,
SC SetBySql=135,
SC ListDatabases=136,
_
SC GetTable=137,
_
SC GetField=138,
_
SC ReadTSDB=139,
_
SC WriteTSDB=140,
_
SC ListDBStorages=141,
SC ListDBTables=142,
_
SC GetDBTableFields=143,
_
SC GetDBTableRecord=144,
_
SC BrowseDisplay=145,
SC CancelDisplay=146,
SC PauseDisplay=147,
SC RefreshDisplay=148,
SC ListDisplays=149,
SC GetModel=150,
_
SC SetModel=151,
_
SC ListModels=152,
_
SC Test=153,
_
SC ListHFDCurves=154,
_
SC GetHFDCurve=155,
_
SC PutHFDCurve=156,
_
SC Query=157,
SC GetVersion=158,
_
SC SendDmail=159,
_
SC RecvDmail=160,
_
SC SendMsg=161,
SC RecvMsg=162,
SC StartWorkflow=163,
_
SC DeleteWorkflow=164,
_
SC TerminateWorkflow=165,
_
SC GetLink=166,
_
SC ListLinks=167,
_
SC LinkControl=168
_
//读 USV 控制块值
//设置 USV 控制块值
//读文件
//设置文件
//删除文件
//读文件属性值
//获取文件列表
//获取文件目录
//用SQL 读取数据库内容
//用SQL 修改数据库内容
//获取数据库列表
//获取数据库表结构
//获取数据库域结构
//读取时间序列库
//写入时间序列库
//获取数据库存储清单
//获取数据库表清单
//获取数据库表结构
//获取数据库表记录
//订阅画面
//注销画面
//暂停画面
//刷新画面
//获取画面列表
//获取模型
//更新模型
//获取模型列表
//测试
//查询历史未来数据信息
//读取历史未来数据
//写入历史未来数据
//综合查询
//读取版本信息
//发送邮件
//接收邮件
//发送消息
//接收消息
//启动工作流程
//删除工作流程
//结束工作流程
//读取通信链路
//读取通信链路列表
//通信链路控制
GB/T 33602—2017
}ServiceCode;
F.4.6 GSP ServiceError(服务响应错误原因)
//服务响应错误原因
typedef enum {
instance not available=1, //实例不可用
_ _
instance in use=2, //实例在使用
_ _
access violation=3, //访问违例
_
access not allowed in current state=4,//在当前状态不许可访问
parameter value inappropriate=5, //参数值不合适
parameter value inconsistent=6, //参数值不一致
class not supported=7, //类不支持
instance locked by other client=8, // 实例由其他客户闭锁
control must be selected=9, //控制前必须选择
_ _ _
type conflict=10, //类型混淆
failed due to communications constraint=11,//通信约束失败
failed due to server constraint=12 //由于服务器约束失败
_ _ _ _
}GSP ServiceError;
F.4.7 GSP ClassID(预定义类标识)
//预定义数据类标识CI
typedef enum {
CI TriggerConditions=3, //数据触发原因
CI AssociateID=4, //关联标识
_
CI AnalogueValue=5, //遥测数据
CI PointValue=6, //遥信数据
CI ChangedAnalogueValue=7, //变化遥信数据
CI ChangedAnalogueValueWithTime=8,// 带时标的变化遥测数据
CI ChangedPointValue=9, //变化遥信数据
CI ChangedPointValueWithTime=10, //带时标的变化遥信数据
CI ClassInfo=11, //类描述信息
_
CI OneDataDefinition=12, //单点数据定义
_
CI EventInfo=13, //事件信息
CI EventData=14, //事件数据
_
CI EventFilter=15, //事件查询条件
CI FileHead=16, //文件头定义
_
CI TDbSQL=17, //数据库 SQL 语句信息
CI ResultFieldInfo=18, //结果域信息
CI ResultDataValue=20, //查询返回值
CI GetResultStru=22, //查询返回值
_
CI DBInfo=23, //数据库描述信息
_
CI DataSetInfo=24, //数据集配置信息
_
CI GoCBFormat=25, //GOOSE 控制块定义
GB/T 33602—2017
CI GOOSEFormat=26,
_
CI MSVCBFormat=27,
CI USVCBFormat=28,
CI SVFormat=29,
_
CI TimeStamp=30,
CI OptFlds=31,
CI BRCBFormat=32,
CI BRCBReportFormat=33,
CI URCBFormat=34,
_
CI URCBReportFormat=35,
CI EntryData=36,
CI ReasonCode=37,
CI DataSetAbstract=38,
_
CI LinkAttribute=39,
_
CI TSDB Value=40,
_ _
CI TSDB DESCR=41,
_ _
CI TSDB PARA=42,
_ _
CI QueryResult=43,
CI ObjectRef=44,
CI ControlData=45
_
}GSP ClassID
F.4.8 GSP ControlErrorCause(控制错误原因)
//GOOSE 报文定义
//多路广播采样量测值控制块定义
//单路传输采样量测值控制块定义
//采样量测值报文定义
//时间戳
//包含在报告中的任选域
//缓存报告控制块类定义
//缓存报告格式定义
//非缓存报告控制块类定义
//非缓存报告格式定义
//条目数据
//原因码
//数据集摘要
//链路属性
//时间序列库测点数据
//时序库描述符
//测点参数
//综合查询结果
//数据对象标识
//控制数据
//附加的原因诊断
typedef enum{
Blocked by switching hierarchy=31,
Select failed=32,
_
Invalid position=33,
Position reached=34,
// (由开关层闭锁)
//(选择失败)
//(无效位置)
//(位置早已到达)
Parameter change in execution=35, //(执行中参数改变)
Step limit=36,
Blocked by Mode=37,
Blocked by process=38,
Blocked by interlocking=39,
Blocked by synchrocheck=40,
Command already in execution=41,
Blocked by health=42,
one of n control=43,
_ _ _
Abortion by cancel=44,
Time limit over=45,
_ _
Abortion by trip=46,
Object not selected=47,
Ojbect already selected=48,
//(步位置受限制)
//(模式闭锁)
//(过程闭锁)
//(受互锁闭锁)
//(同期检查闭锁)
//(命令已在执行中)
//(由运行状况闭锁)
//(n 中取1控制)
//(由取消异常中止)
//(超时)
//(跳闸异常中止)
//(没有选择对象)
//(对象早已被选择)
No access authority=49,
Ended with overshoot=50,
_ _
Abortion due to deviation=51,
_ _ _
Abortion by communication loss=52, Unknown=53,
Blocked by command=54,
None=55,
Inconsistent parameters=56,
Locked by other client=57
GB/T 33602—2017
//(无访问权限)
//(因过调节结束)
//(由于失常(偏差)异常中止)
//(通信故障异常中止)
//(未知)
//(由命令闭锁)
//(无)
//(参数不一致)
//(有其他客户闭锁)
}GSP ControlErrorCause;
GB/T 33602—2017
(规范性附录)
公共类标识(CI)定义
G.1 概述
电力系统通用服务协议中公共类标识CI 对应的数据定义如下,采用C
语言格式进行描述,应使用
长字(4个八位位组)对齐和紧凑编译。
G.2 特殊类标识
CI=0, 本侧尚没有与该服务对应的数据类的定义。
CI=1, 本侧支持与该服务对应的数据类的所有属性。
G.3 公共类标识
G.3.1 TriggerConditions(数据触发原因)
//CI=3, 数据触发原因
typedef struct{
BOOLEAN data change:l; //数据变化
BOOLEAN quality change:1 //质量变化
BOOLEAN data update:1; //数据更新
BOOLEAN integrity:1; //周期性触发,完整性
BOOLEAN general interrogation:1;//启动总召唤
BOOLEAN reserved1:l; //预留1
BOOLEAN reserved2:1; //预留2
BOOLEAN reserved3:1; //预留3
}TriggerConditions;
G.3.2 AssociateID ( 关 联 标 识 )
//CI=4, 关联标识
typedef struct { | ||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AssociatelD; |
G.3.3 AnalogueValue(遥测数据)
//CI=5, 遥测数据
GB/T 33602—2017
typedef struct {
FLOAT32 value; //浮点数据值
INT16 quality; //质量位
INT16 reserved; //保留参数
}AnalogueValue;
说明:
quality为两个八位位组,从高到低的意义依次为:bit15~bit7:备用;bit6:0,该数据未停止更新,1,
该数据停止更新;bit5:0,该数据有效,1,该数据无效;bit4:0,该数据未引起告警,1,该数据引起告
警;bit3:0,该数据为自动采集,1,该数据为人工置入;bit2:0,该数据非状态估计导出,1,该数据是
状态估计导出;bit1,bit0预留。
G.3.4 PointValue(遥信数据)
//CI=6, 遥信数据
typedef struct {
INT16U pointQ; //遥信数据
}PointValue;
说明:
pointQ为遥信数据,bit15~bit7:备用;bit6~bit2:质量码,见CI=5 的
quality 的意义;bit1~bitO:
状态值。
G.3.5 ChangedAnalogueValue(变化遥测数据)
//CI=7, 变化遥测数据
typedef struct {
INT16 index; //通信编号
INT16 quality; //状态值和质量位,含义同CI=6 的 pointQ
FLOAT32 value; //浮点数据值
ChangedPointValue;
G.3.6 ChangedAnalogueValueWithTime(带时标的变化遥测数据)
//CI=8, 带时标的变化遥测数据
typedef struct {
|
|
---|
INT64U timeSecs;
INT16U timeUSecs;
}ChangedAnalogueValueWithTime;
说明:
//通信编号
//质量位,含义同 CI=5 的 quality
//浮点数据值
//采样时间,Unix 时间戳
//采样时间,单位:毫秒
timeSecs为 Unix 时间戳,从1970年1月1日0时0分0秒计起的(UTC/GMT)
数,不考虑闰秒。
G.3.7 ChangedPointValue(变化遥信数据)
//CI=9, 变化遥信数据
GB/T 33602—2017
typedef struct {
INT16U index; //通信编号
INT16 pointQ; //状态值和质量位,意义同CI=6 的 pointQ
}ChangedPointValue;
G.3.8 ChangedPointValueWithTime(带时标的变化遥信数据)
//CI=10, 带时标的变化遥信数据
typedef struct {
INT16U
INT16
INT64U
INT16U
index;
pointQ;
timeSecs;
timeUSecs;
//通信编号
//状态值和质量位,含义同CI=6 的 pointQ
//采样时间,Unix 时间戳
//采样时间,单位:毫秒
}ChangedPointValueWithTime;
G.3.9 ClassInfo(类描述信息)
//CI=11, 类描述信息
typedef struct { | ||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ClassInfo; |
G.3.10 OneDataDefinition(单点数据定义)
//CI=12, 单点数据定义
typedef struct { | ||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OneDataDefinition;
说明:
dataMode
为数据类型,bit0=0,表示遥测类型数据;bit0=1,表示遥信类型数据,deadBand
无效;
bitl=0 表示为单点遥信,bitl=1 表示为双点遥信;其余位为0。
G.3.11 EventInfo(事件信息)
//CI=13, 事件信息
typedef struct {
INT32U eventID; //事件编号
INT16U eventType; //事件类型
TriggerConditions trgCondition; //事件触发条件
GB/T 33602—2017
INT32U channelID; //事件通道
INT8 eventName[32]; //事件名称描述,与 eventData 的关联,事件描述
}EventInfo;
说明:
eventType:0~1023作为通用事件类型,其中告警(1),故障简报(2),录波完成(3),模型变更(4),
1024~65535作为备用。
G.3.12 EventData(事件数据)
//CI=14, 事件数据
typedef struct { | ||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}EventData; | ||
说明: |
eventContent:事件内容在eventType=1
时格式为“告警时间'\0'设备名称'\0'告警内容'\0'告
警原因'\0'"其中,事件时间(北京时间)格式如:"2015-01-2910:23:04.095”。年、月、日之间用英
文输入的中横线"一"隔离;年月日与时分秒之间用英文输入的空格""隔离;时、分、秒之间用英文输
入的冒号":"隔离;秒与毫秒之间采用英文输入的句号"."隔离。月、日、时、分、秒固定采用2个八
位位组表示,不足的用0补齐;毫秒固定采用3个八位位组表示,不足的用0补齐。事件内容在
eventType=2 时,内容格式为“录波文件个数
\|录波文件名(带路径,但不带后缀名) \|后缀名1,.后
缀名 n"。 事件内容在取其他值时应预先进行约定。
G.3.13 EventFilter(事件查询条件)
//CI=15, 事件查询条件
typedef struct { | ||
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}EventFilter; |
G.3.14 FileHead(文件头定义)
//CI=16, 文件头定义
typedef struct {
GB/T 33602—2017
}FileHead; |
|
---|
G.3.15 TDbSQL (数据库 SQL 语句信息)
//CI=17, 数据库 SQL 语句信息
typedef struct {
INT8U INT16U INT8 INT8 INT8 INT8 INT8 |
|
---|
TDbSQL;
//文件大小
//创建时间,取值同CI=8 中的 timeSecs
//最后修改时间,取值同CI=8 中的 timeSecs
//文件权限
//数据摘要
//文件路径名
//数据库类型:1,商用库;2:实时库
//语句长度
//数据库名称
//态名称
//应用名称
//表名称
//SQL 语句
G.3.16 ResultFieldInfo(结果域信息)
//CI=18, 结果域信息
typedef struct {
INT16 dataType; //数据类型
INT16 dataLen; //数据长度
}ResultFieldInfo;
G.3.17 ResultDataValue(结果值)
//CI=20, 结果值
typedef struct {
DATA dataValue; //数据值,DATA 为特定数据类型,根据实际返回结果确定
}ResultDataValue;
G.3.18 GetResultStru(查询返回值)
//CI=22, 查询返回值
typedef struct {
INT16 fieldNum; //域个数
ResultFieldInfo * fieldInfo; //域信息序列
INT32U dataNum; //数据个数
ResultDataValue x dataValueSeq; //数据值序列
}GetResultStru;
G.3.19 DBInfo(数据库描述信息)
//CI=23, 数据库描述信息
typedef struct {
INT8U
INT8
INT8
}DBInfo;
dbType;
dbName[32];
dbConnInfo[64];
GB/T 33602—2017
//数据库类型
//数据库名称
//数据库连接信息
G.3.20 DataSetInfo(数据集配置信息)
//CI=24, 数据集配置信息
typedef struct {
INT8U infoFlag;
INT32U cycleTime;
}DataSetInfo;
G.3.21 GoCBFormat(GOOSE 控制块定义)
//CI=25,GOOSE typedef struct {
说明: |
|
---|
//数据集属性有效标志
//数据集全数据发送周期
//GoCB 实例的标识符
//GoCBRef 实例的标识符
//控制块使能标识
//应用系统唯一标识
//被传输的数据集索引
//配置版本号
//需要重新配置标志
除 GoID、DataSet外,其他成员定义及取值范围见 DL/T 860.72—2013
中18.2.1。
G.3.22 GOOSEFormat(GOOSE 报文定义)
//CI=26,GOOSE typedef struct { |
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//(TRUE) 仿真 |(FALSE) 实际值 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}GOOSEFormat; |
GB/T 33602—2017
说明:
除 DataSet、GoID、GoCB外,其他成员定义及取值范围见 DL/T 860.72—2013
中18.2.3.1。
G.3.23 MSVCBFormat (多路广播采样量测值控制块定义)
//CI=27, 多路广播采样量测值控制块定义
typedef struct {
INT8
INT8
BOOLEAN
INT8U
INT8U
INT32U
INT8U
INT16U
BOOLEAN BOOLEAN
BOOLEAN
MSVCBFormat;
说明:
MsvCBName[32]; //MsvCB 实例的标识符
MsvCBRef[64]; // MsvCB实例的路径名
SvEna; //采样量测值使能标识
MsvID; //多路广播采样测量值标识符
DataSet; //被传输的数据集索引
ConfRev; //配置版本号
SmpMod; //采样模式
SmpRate; //采样速率
refresh time; //刷新时间标志
sample synchronised; //采样同步时间标志
sample rate; //取自 MSVCB 实例的采样率
除 MsvID、DataSet外,其他成员定义及取值范围见DL/T
860.72—2013中19.2.1。
G.3.24 USVCBFormat (单路传输采样量测值控制块定义)
//CI=28, 单路传输采样量测值控制块定义
typedef struct {
INT8 UsvCBName[32]; //UsvCB 实例的标识符
INT8 UsvCBRef[64]; //UsvCB 实例的路径名
BOOLEAN SvEna; //采样量测值使能标识
BOOLEAN Resv; //保留 USVCB 标志
INT8U UsyID; //多路广播采样测量值标识符
INT8U DataSet; //被传输的数据集索引
INT32U ConfRev; //配置版本号
INT16U SmpRate; //采样速率
BOOLEAN refresh time; //刷新时间标志
BOOLEAN sample synchronised; // 采样同步时间标志
BOOLEAN sample rate; //取自 USVCB 实例的采样率
USVCBFormat;
说明:
除 UsvID、DataSet外,其他成员定义及取值范围见 DL/T 860.72—2013
中19.3.1。
G.3.25 SVFormat (采样量测值报文定义)
//CI=29, 采样量测值报文定义
typedef struct {
INT8U syID; //SV 实例的标识符,MsvID or UsvID
BOOLEAN BOOLEAN
BOOLEAN
refresh time;
sample synchronised;
sample rate;
GB/T 33602—2017
//刷新时间标志
//采样同步时间标志
//取自MSVCB 实例的采样率
INT8U DataSet; //被传输的数据集索引
INT16U SmpCnt; //采样计数器
TimeStamp RefrTim; //报文时标
INT32U ConfRev; //配置版本号
BOOLEAN SmpSynch; //采样由时钟同步标志
INT16U SmpRate; /采样率
INT8U classIndex; //数据类型
INT8U objectCount; //数据对象个数
DATA Value; //数据值列表
}SVFormat;
说明:
除 DataSet外,其他成员定义及取值范围见DL/T 860.72—2013
中19.4,其中原定义中的 Value参
数替换为 classIndex、objectCount及 *Value。
G.3.26 TimeStamp (时间戳)
//CI=30, 时间戳
typedef struct {
INT64
INT32U
BOOLEAN
BOOLEAN
BOOLEAN
INT8U
}TimeStamp;
说明:
SecondSinceEpoch; //Unix 时间戳
FractionOfSecond; //当前秒的小数
LeapSecondKnown; //已知闰秒标志
ClockFailure; //时钟故障标志
ClockNotSynchronized;//时钟未同步标志
TimeAccuracy; //时间准确度
除 SecondSinceEpoch外,其他成员定义及取值范围见 DL/T 860.72—2013
中6.1.2.9。
G.3.27 0ptFlds(包含在报告中的任选域)
//CI=31, 包含在报告中的任选域
typedef struct {
BOOLEAN BOOLEAN BOOLEAN BOOLEAN BOOLEAN
BOOLEAN
BOOLEAN
BOOLEAN
}OptFlds;
说明:
sequence number:l;
report time stamp:1;
reason for inclusion:l;
_ _
data set name:1;
_ _
data reference:l;
_
buffer overflow:1; //URCB
entryID:1;
conf revision:l;
_
不使用,保留
不使用,保留
GB/T 33602—2017
成员定义及取值范围见DL/T 860.72—2013 中17.2.2.8。
G.3.28 BRCBFormat (缓存报告控制块类定义)
//CI=32, 缓存报告控制块类定义
typedef struct {
INT8U BRCBName[32]; //缓存报告控制块名
INT8U BRCBRef[64]; //BRCB 唯一路径名
INT8U RptID; //报告标识符
BOOLEAN RptEna; //使能标识
INT8U DataSet; //数据集引用
INT32U ConfRev; //配置版本号
OptFlds optFlds; //包含在报告中的任选域
INT32U BufTm; //缓存时间
INT16U SqNum; //顺序号
TriggerConditions TrgOps; //触发选项
INT32U IntgPd; //完整性周期
BOOLEAN GI; //总召唤
BOOLEAN PurgeBuf; //清除缓存
INT8 EntryID[8]; //条目标识符
TimeStamp TimeOfEntry; //条目时间
INT16 ResvTms; //保留时间
INT8 Owner[64]; //控制块实例的所有者
BRCBFormat;
说明:
除 DataSet、EntryID外,其他成员定义及取值范围见DL/T 860.72—2013
中17.2.2。
G.3.29 BRCBReportFormat (缓存报告格式定义)
//CI=33, 缓存报告格式定义
typedef struct {
INT8U RptID; //报告标识符
OptFlds optFlds; //包含在报告中的任选域
//如 optFlds 中 sequence number 为 TRUE
INT16U SqNum; //顺序号
INT16U SubSqNum; //子顺序号
BOOLEAN MoreSegmentsFollow;//同顺序号有多个报告段
//如 optFlds 中 data set name 为 TRUE
INT8U DataSet; //数据集引用
//如 optFlds 中 buffer overflow 为 TRUE
BOOLEAN BufOvfl; //发生缓存溢出
//如 optFlds 中 conf revision为 TRUE
INT32U ConfRev; //配置版本号
//如 optFlds 中 report time stamp为 TRUE
TimeStamp TimeOfEntry; //数据条目时间
GB/T 33602—2017
//如 optFlds 中 entryID 为 TRUE
INT8 EntryID[8]; //条目标识符
//EntryData
INT8U classIndex; //数据类型
INT8U objectCount; //数据对象个数
EntryData * entryData; //条目数据列表
}BRCBReportFormat;
说明:
除 DataSet、EntryID及
EntryData外,其他成员定义及取值范围见DL/T860.72—2013 中17.2.3.2.2。
G.3.30 URCBFormat (非缓存报告控制块类定义)
//CI=34, 非缓存报告控制块类定义
typedef struct {
INT8U URCBName[32];
INT8U URCBRef[64];
INT8U RptID;
BOOLEAN RptEna;
BOOLEAN Resv;
INT8U DataSet;
INT32U ConfRev;
OptFlds optFlds;
INT32U BufTm;
INT8U SqNum;
TriggerConditions TrgOps;
INT32U IntgPd;
BOOLEAN GI;
INT8 Owner[64];
}URCBFormat;
说明:
//缓存报告控制块名
//BRCB 唯一路径名
//报告标识符
//使能标识
//保留 URCB
//数据集引用
//配置版本号
//包含在报告中的任选域
//缓存时间
//顺序号
//触发选项
//完整性周期
//总召唤
//控制块实例的所有者
除 DataSet外,其他成员定义及取值范围见 DL/T 860.72—2013 中17.2.4。
G.3.31 URCBReportFormat (非缓存报告格式定义)
//CI=35, 非缓存报告格式定义
typedef struct {
INT8U RptID; //报告标识符
OptFlds optFlds; //包含在报告中的任选域
//如 optFlds 中 sequence number为 TRUE
INT8U SqNum; //顺序号
INT16U SubSqNum; //子顺序号
BOOLEAN MoreSegmentsFollow;//同顺序号有多个报告段
//如 optFlds 中 data set name 为TRUE
INT8U DataSet; //数据集引用
//如 optFlds 中 conf revision为 TRUE
GB/T 33602—2017
INT32U ConfRev; //配置版本号
//如 optFlds 中 report time stamp为 TRUE
TimeStamp //EntryData
INT8U
INT8U
EntryData
TimeOfEntry;
classIndex;
objectCount;
* entryData;
//数据条目时间
//数据类型
//数据对象个数
//条目数据列表
}URCBReportFormat;
说明:
属性类型含义同BRCBReportFormat
的定义相同,报告格式中的BufOvfl和EntryID参数未用,报
告中不包括 EntryID和 BufOvfl。 其他成员定义及取值范围见DL/T
860.72—2013 中17.2.3.2.2。
G.3.32 EntryData(条目数据)
//CI=36, 条目数据
typedef struct {
//如 optFlds 中 data reference 为 TRUE
INT16U DataRef; //将要报告的数据集成员索引
// Value
DATA Value; //数据值
//若 optFlds 中 reason for inclusion 为 TRUE
ReasonCode ReasonCode; / / 原 因
EntryData;
说明:
除 DataRef外,其他成员定义及取值范围见DL/T 860.72—2013
中17.2.3.2.2.9。
G.3.33 ReasonCode(原因码)
//CI=37, 原因码
typedef struct {
BOOLEAN data change:l;
BOOLEAN quality change:l;
BOOLEAN data update:l;
BOOLEAN Integrity:l;
BOOLEAN general interrogation:1;
BOOLEAN application trigger:l;
BOOLEAN reserved:2;
ReasonCode;
说明:
成员定义及取值范围见DL/T 860.72—2013 中6.1.2.12。
G.3.34 DataSetAbstract(数据集摘要)
//CI=38, 数据集摘要
typedef struct {
INT8U dataSetID; //数据集类型
INT64 modifyDate;
INT16U dataNum;
INT8 hashValue[32];
}DataSetAbstract;
G.3.35 LinkAttribute (链路属性)
//CI=39, 链路属性
typedef struct {
}LinkAttribute; |
|
---|
G.3.36 TSDB Value (时间序列库测点数据)
//CI=40, 时间序列库测点数据
typedef struct {
}TSDB Value; |
|
---|
G.3.37 TSDB DESCR (时序库描述符)
//CI=41, 时序库描述符
typedef struct {
BOOLEAN BOOLEAN
G.3.38 TSDB PARA |
|
---|
//CI=42, 测点参数
typedef struct {
GB/T 33602—2017
//最后更新时间,Unix 时间戳
//数据集内测点个数
//数据集索引表文件哈希值
//链路名称
//站名
//协议名称
//对端 IP 地址
//网络通信端口
//速率,单位:位/秒
//站地址
//运行状态0:未运行,1:正在运行
//最近一次启动时间
//平均误码率
//平均速率
//误码率
//Unix 时间戳
//毫秒
//浮点数据值
//质量位
//模式,0:实时;1:历史
//是否需要转换字节序
//远程调阅访问标志
//最后活动时间
GB/T 33602—2017
TSDB PARA; |
|
---|
G.3.39 QueryResult(综合查询结果)
//CI=43, 综合查询结果
typedef struct {
}QueryResult; |
|
---|
//测点号
//开始时间
//结束时间
//步长,缺省为0
//结果类型1.文件;2.实时库;3.历史库
//结果索引缓存长度
//结果索引信息
//摘要缓存长度
//摘要,以 s 语言描述的结果位置信息
G.3.40 ObjectRef(数据对象标识)
//CI=44, 综合查询结果
typedef struct {
INT8U dataSetID; //数据集 ID
INT16U indexno; //数据标识
INT8 dataName[32]; //数据名称
ObjectRef;
G.3.41 ControlData(控制数据)
//CI=45, 控制数据
typedef struct {
INT8U ctrlFields; //控制数据标志域,按位解析
INT32 nValue; //整型数据值
FLOAT32 fValue; //浮点类型数据值
INT16U pointQ; //数据值
TimeStamp operTm; //命令执行的绝对时间
INT8 origin[32]; //始发者
INT16U ctlNum; //控制序列号
TimeStamp time; //客户发送控制请求的时间
bool test; //测试状态
INT8U check; //检查条件
INT16U errCause; //错误原因
INT8U dataSetID; //数据集标识
INT16U indexno; //数据标识
INT8 dataName[32]; //数据名
INT8 AuthName[32]; //端对端认证签名
ControlData;
GB/T 33602—2017
说明:
ctlFields:bit0=0,表示为模拟量,nValue 或 fValue 有效,bit0=1,
表示为开关量,pointQ 有效;bitl =0,nValue 有效,bit1=1,fValue
有效;bit2=0 表示 pointQ 为单点遥信,bit2=1 表示 pointQ 为
双点遥信;bit3=1 表示控制对象支持 TimeActivatedOperate 服务,operTm
属性有效,bit3=0, operTm 属性无效;bit4=0
表示本控制数据在作为返回信息时,为正常执行结果,errCause属性无
效,bit4=1 表示为异常执行结果,errCause属性有效;bit15~bit5
为0,保留。
pointQ:定义同CI=6 中 pointQ
定义;在作为控制数据时,单点遥信情况下,0值代表控分,1值代
表控合,复归同控分;变压器采用遥控方式调档时,降档同控分,升档同控合。
test:定义由正规操作所引起还是由测试所引起。
check:bit0=1,进行 synchrocheck;bit1=1,进行 interlock check;bit2~bit7
为0。
errCause:错误原因取值范围为 ServiceError和 GSP ControlErrorCause
所定义的内容。
GB/T 33602—2017
(规范性附录)
服 务 原 语
H.1 概述
本附录提供了电力系统通用服务协议中各类服务原语的解释和详细定义,定义的描述遵循
GB/T33604 的要求,服务原语中所涉及的模型和文件的命名方式见GB/T 33601
的要求。
H.2 关联功能组
H.2.1 关联服务
数据交换之前通信双方(客户与服务者)应先建立关联,客户发出的关联请求中应包含客户身份验
证信息,通过服务者验证后方可开始会话。客户与服务者之间可建立多个关联,关联数由具体实现规
定。关联可用于客户与服务者之间、客户与服务代理之间,也可用于服务代理与服务代理之间。
通信会话结束时应释放关联,由客户通知服务者,服务者释放与关联有关的资源。服务者应为每一
个建立的关联创建一个定时器,如果长时间未收到客户的服务请求,视为通信已结束,并释放有关的资
源。如果客户需要长时间保持关联,应定时发送Test
请求。如果客户检测到通信异常或服务者拒绝释
放关联,客户应使用Abort 服务中止关联。
关联服务定义如下:
\<Associate(
IN STRING:authPara,
IN STRING:serverRef, IN INT16U:splitLength,
IN INT8U:windowSize,
OUT |
|
---|---|
OUT |
|
OUT |
|
)"关联"/>
//安全认证
//服务器标识
//流数据分片长度,可选择填写
//流数据确认窗口大小,可选择填写
//关联 ID
//返回值
//结果说明
说明:在需要进行关联时,需将 serverRef和
authPara作为参数在关联服务中传递到对方。
H.2.2 异常中止
\<Abort(
IN INT64U:associateID,
INOUT STRING;reason
/ / 关 联 ID
//中止原因
)"中止关联"/>
说明:服务者不能够拒绝中止关联请求,只能返回肯定响应。
H.2.3 释放关联
〈Release(
IN INT64U:associateID,
IN STRING:resultReason,
OUT INT16:resultCode
)"释放关联"/>
H.3 服务管理
H.3.1 创建服务
\<CreateService(
IN STRING:authPara,
IN STRING:servicelnfo, OUT INT16U:serviceID,
OUT INT16:resultCode
GB/T 33602—2017
/ / 关 联 ID
//释放原因
//返回值
//安全认证
//服务的定义信息
//创建的服务编码
)"创建服务"/>
说明:服务的定义信息采用符合简单服务接口规范的S 语言进行描述。
H.3.2 删除服务
\<DeleteService(
IN STRING:authPara,
ININT16U:serviceID,
OUT INT16U:serviceID,
OUT INT16:resultCode
)"删除服务"/>
//安全认证
//删除的服务编码
//删除的服务编码
H.3.3 注册服务
\<RegisterService(
IN STRING:authPara,
IN STRING:providerID, IN STRING:nodeName,
IN STRING:ipAddr,
IN INT16U:port,
ININT16U:serviceID,
OUT INT16:resultCode
)"注册服务"/>
H.3.4 取消服务
\<CancelService(
IN STRING:authPara,
style="width:0.57993in;height:0.56203in" />IN STRING:providerID,
IN INT16U:serviceID,
OUTINT16:resultCode
)"取消服务"/>
//安全认证
//服务提供者
//服务节点
//节点 IP地址
//节点端口号
//注册的服务编码
//安全认证
//服务提供者
//取消的服务编码
GB/T 33602—2017
H.3.5 服务状态(心跳)报告
\<AliveServiceState(
IN STRING:providerID, IN STRING:serverName,
IN INT16:aliveState,
OUT INT16:resultCode,
)"服务状态报告"/>
//服务提供者
//服务名
//服务状态
//返回结果
H.3.6 获取服务列表
\<ListServices(
IN STRING:domainName, //域名
IN STRING:providerID, //服务提供者,空时取全部提供者服务
IN STRING:nodeName, //服务节点名
OUT STRING:servicelnfoList,//服务信息列表
OUT INT16:resultCode
)"获取服务列表"/>
说明:服务描述服务节点上的 m 个服务信息,其中 serviceInfoList
为(providerID,serviceID,
serviceName)的列表。
H.3.7 获取服务信息
\<GetService(
IN INT16U:serviceID,
OUT STRING:servicelnfo,
//获取的服务编码
//服务定义信息
OUT INT16:resultCode
)"获取服务信息"/>
H.3.8 服务定位
\<LocateService(
IN STRING:domainName, |
|
---|---|
IN STRING:providerID, |
|
IN STRING:serviceName, |
|
OUT STRING:nodeName, |
|
OUT STRING:ipAddr, |
|
OUT INT16U:port, |
|
OUT INT16:resultCode |
)"服务定位"/>
H.3.9 特定服务域内的服务提供者查询
\<ListProvidersofDomain(
IN STRING:domainName, //域名
OUT INT16:resultCode, / / 返 回 结 果
OUT STRING:providerID[] //服务提供者清单
GB/T 33602—2017
)"特定服务域内的服务提供者查询"/>
H.3.10 特定服务部署位置查询
\<ListProvidersofService(
IN STRING:domainName, // 域名
IN STRING:srviceName, //服务名
OUT INT16:resultCode, //返回结果
OUT STRING:ProviderID[] //服务提供者清单
)"特定服务部署位置查询"/>
H.3.11 获取服务状态
\<GetServiceState(
style="width:0.54673in;height:0.50348in" />
IN STRING:domainName, // 域名
IN STRING:providerID, // 服务提供者
IN STRING:serverName, //服务名
OUT INT16:resultCode, //返回结果
OUT INT16:serviceState //服务状态
)"获取服务状态"/>
H.3.12 获取域名
\<GetDomainName(
OUT INT16:resultCode,
OUT STRING:domainName
)"获取域名"/>
H.3.13 设置域名
// 返回结果
//服务域名
\<SetDomainName(
IN STRING:authPara,
IN STRING:domainName,
OUT INT16:resultCode
//安全认证
//服务域名
// 返回结果
)"设置域名"/>
H.4 域管理
H.4.1 域注册
\<DomainRegister(
IN STRING:authPara, / / 安 全 认 证
IN STRING:domainName, // 服务代理域名
IN STRING:proxyIPAddress,// 服务 IP 地址,多个用","隔离
IN BITSTRING:digitalCertificate,//数字证书(采用二进制)
IN INT16:operation, //1:注册,2:取消注册
OUT INT16:resultCode //返回结果
)"域注册"/>
GB/T 33602—2017
H.4.2 服务域状态(心跳)报告
\<DomainAliveState(
IN STRING:domainName,
IN INT16:aliveState,
OUT INT16:resultCode
)"服务域状态报告"/>
// 服务代理域名
//服务状态
//返回结果
H.4.3 域注册管理
\<DomainRegistManage(
IN STRING:authPara,
IN STRING:domainName,
IN INT16:operation,
OUT INT16:resultCode
)"域注册管理"/>
//安全认证
//服务代理域名
//数字证书到期,重新注册,强制离线等
//返回结果
H.4.4 域名查询
\<ListDomainName(
IN BITSTRING:digitalCertificate, //数字证书(采用二进制)
OUT INT16:resultCode, //返回结果
OUT STRING:domainNamelist[] //域名清单
)"域名查询"/>
H.4.5 代理定位
\<LocateProxy(
IN BITSTRING:digitalCertificate,//数字证书(采用二进制)
IN STRING:domainName, / / 域 名
OUT INT16:resultCode, //返回结果
OUT STRING:IPAddresslist[], // 代理地址清单
OUT INT16:Counter //计数器,用于多代理负载均衡
)"代理定位"/>
H.5 类管理
H.5.1 创建服务相关类
〈CreateClass(
IN STRING:authPara,
IN ClassInfo:classInfo,
IN VOID*:classDefinition,
OUT INT16U:serviceID,
OUT INT16U:classID,
OUT INT16:resultCode
)"创建服务相关类"/>
//安全认证
//类描述信息
//类定义
//类所属服务标识
//类ID
GB/T 33602—2017
说明:第一帧采用对象数据单元发送 classInfo,第二帧采用类描述数据单元。
H.5.2 获取服务相关类
\<GetClass(
IN INT16U:servicelD,
IN INT16U:classID,
OUT ClassInfo:classInfo,
OUT VOID*:classDefinition,
OUT INT16:resultCode
)"获取服务相关类"/>
//类所属服务标识
//类 ID
//类描述信息
//类定义
H.5.3 删除服务相关类
\<DeleteClass(
IN STRING:authPara,
IN INT16U:serviceID,
IN INT16U:classID,
OUT INT16:resultCode
)"删除服务相关类"/>
//安全认证
//类所属服务标识
//类 ID
H.5.4 获取服务相关类列表
\<ListClasses(
IN INT16U:serviceID,
OUT ClassInfo*;classInfoList,
OUT INT16:resultCode
)"获取服务相关类列表"/>
//类所属服务标识
//类描述信息
H.6 数据
H.6.1 读数据值
\<GetDataValues(
IN STRING:Reference,
OUT STRING[]:dataAttributeValue,
OUT INT16:resultCode
)"读数据值"/>
//数据引用
//数据属性引用
H.6.2 设置数据值
\<SetDataValues(
INSTRING:Reference,
INSTRING[]:dataAttributeValue,
OUT INT16:resultCode,
OUT STRING:resultReason
)"设置数据值"/)
//数据引用
//数据属性引用
GB/T 33602—2017
H.6.3 读数据目录
〈GetDataDirectory(
IN STRING:dataObjectReference,
OUT STRING[]:dataAttributeName,
OUT INT16:resultCode
//数据对象引用
//数据属性名列表
)"读数据目录"/>
H.6.4 读数据定义
\<GetDataDefinition(
IN STRING:dataObjectReference, //数据对象引用
OUT STRING[]:dataObjectValue,
OUT INT16:resultCode
)"读数据定义"/>
H.7 数据集
H.7.1 读数据集
〈GetDataSet(
INOUT INT8U:dataSetID,
OUT DataSetInfo:dataSetInfo,
OUT OneDataDefinition*:dataSetDefinition,
OUT INT16:resultCode
)"读数据集"/>
H.7.2 设置数据集
〈SetDataSet(
LC AssociateID:assocID,
IN INT8U:dataSetID, //数据集 ID
IN DataSetInfo:dataSetInfo, //数据集属性信息
IN OneDataDefinition*:dataSetDefinition,//数据集内数据定义列表
OUT INT16:resultCode,
OUT STRING:resultReason
)"设置数据集"/>
H.7.3 生成数据集
\<CreateDataSet(
IN INT8U:dataSetID, //数据集 ID
IN DataSetInfo:dataSetInfo, //数据集属性信息
IN OneDataDefinition*:dataSetDefinition,//数据集内数据定义列表
OUT INT16:resultCode,
OUT STRING:resultReason
)"生成数据集"/>
GB/T 33602—2017
H.7.4 删除数据集
\<DeleteDataSet(
IN INT8U:dataSetID,
OUT INT16:resultCode,
OUT STRING:resultReason
)"删除数据集"/>
H.7.5 校验数据集
〈CheckDataSet(
IN DataSetAbstract:dataSetAbstract, / / 数 据 集 概 要 信 息
OUT INT16:resultCode,
OUT STRING:resultReason
)"校验数据集"/)
H.7.6 读数据集目录
\<GetDataSetDirectory(
IN STRING:dataSetReference, //数据集对象引用
OUT OneDataDefinition*:dataSetDefinition,
OUT INT16:resultCode
)"读数据集目录"/)
H.7.7
读数据集值
\<GetDataSetValues(
INOUT INT8U:dataSetID,
INOUT INT8U:classID,
OUT INT8U:objectNum,
OUT VOID*:data,
OUT INT16:resultCode
//本包数据对象个数
//数据缓冲区地址
)"读数据集值"/>
说明:发送响应时,第一帧采用参数数据单元,发送dataSetID、classID和
objectNum,,后续帧
采用数据集扩展单元发送数据集数据 data,对象数据根据
classID确定选择的数据结构。
H.7.8 发送数据集值
\<SetDataSetValues(
IN INT8U:groupID, //组号(如图形服务中的 displayID)
IN INT8U:dataSetID, //数据集 ID
IN INT8U:classID, //类标识
IN INT8U:objectNum, //本包数据对象个数
IN VOIDx:data, //数据缓冲区地址
OUT INT16:resultCode,
OUT STRING:resultReason
)"发送数据集值"/>
GB/T 33602—2017
说明:第一帧采用参数数据单元,发送 groupID、dataSetID、classID和
objectNum,后续帧采用
数据集扩展单元发送数据集数据 data,对象数据根据
classID确定选择的数据结构。
H.7.9 获取数据集列表
\<ListDataSets(
IN STRING:dataSetReference, //数据集对象引用
OUT INT8U:dataSetNum, //数据集个数
OUT INT8U*:dataSetID, //数据集 ID 列表
OUT INT16:resultCode
)"获取数据集列表"/>
H.8 事件
H.8.1 注册事件
\<RegisterEvent(
INOUT EventInfo:eventInfo,
OUT INT16:resultCode
)"注册事件"/>
//事件信息
H.8.2 订阅事件
\<SubscribeEvent(
INOUT INT16U:eventType,
OUT INT16:resultCode
)"事件订阅"/>
//订阅的事件类型
H.8.3 发送事件
〈SendEvent(
IN EventData:eventData,
OUT INT16:resultCode,
OUT STRING:resultReason
)"发送事件"/>
H.8.4 取消事件注册
\<CancelEventReg(
INOUT EventID:eventID,
OUT INT16:resultCode
)"取消事件注册"/>
//事件数据
//事件信息
H.8.5
查询事件
\<QueryEvent(
IN STRING:deviceName,
IN STRING:eventName,
IN EventType:eventType,
GB/T 33602—2017
IN INT64U:startTime,
IN INT64U:endTime,
OUT EventData*:eventDataList[],
OUT INT16:resultCode
)"查询事件"/>
H.8.6 获取事件列表
\<ListEvents(
OUT EventInfo*:eventList[], //事 件 数 据
OUT INT16:resultCode
)"获取事件列表"/>
H.8.7 取消事件订阅
\<CancelEventSub(
INOUT INT16U:eventType,
OUT INT16:resultCode
)"取消事件订阅"/>
H.9 控制
H.9.1 选择
\<Select(
IN STRING:authPara,
INOUT ObjectRef:objectRef,
OUT INT16:resultCode
)"选择"/)
//事件类型
//安全认证
//控制对象索引,需返回确认
H.9.2 带值选择
\<SelectWithValue(
IN STRING:authPara,
IN CtrlData:ctrlData,
OUT CtrlData:ctrlData
)"带值选择"/>
//安全认证
//控制信息
//带执行结果的控制信息
H.9.3 取消
\<Cancel(
IN STRING:authPara,
IN CtrlData:ctrlData,
OUT CtrlData:ctrlData
)"取消"/>
H.9.4 执行
\<Operate(
//安全认证
//控制信息
//带执行结果的控制信息
GB/T 33602—2017
IN STRING:authPara,
IN CtrlData:ctrlData,
OUT CtrlData:ctrlData
)"执行"/>
//安全认证
//控制信息
//带执行结果的控制信息
H.9.5 命令终止
\<CommandTermination(
INSTRING:authPara,
IN CtrlData:ctrlData
)"命令终止"/>
//安全认证
//正常终止时控制信息中的错误原因为0
H.9.6 时间激活操作
\<TimeActivatedOperate(
IN STRING:authPara,
IN CtrlData:ctrlData,
OUT CtrlData:ctrlData
)"时间激活操作"/>
//安全认证
//控制信息
//带时间激活操作执行结果的控制信息
H.9.7 时间激活操作终止
〈TimeActivatedOperateTermination(
IN STRING:authPara,
IN CtrlData:ctrlData
)"时间激活操作"/>
//安全认证
//带时间激活操作执行结果的控制信息
H.9.8 操作控制
\<OperateControl(
IN STRING:authPara,
IN STRING:ControlObjectName,
IN INT8U:Operation,
OUT INT16:resultCode
)"操作控制"/>
//认证参数
//控制对象名称
//控制码,0:选择分,1:选择合,2执行分,
//3:执行合,4:直接分,5:直接合,
//6:同期合,7撤销
H.9.9 查询操作票列表
〈GetSequenceList(
IN STRING:authPara,
IN STRING:nodeName,
OUT STRING*:SequenceList,
OUT INT16:resultCode
)"查询操作票列表"/>
H.9.10 序列控制
\<SequenceControl(
//安全认证
//节点名
//序列控制操作票列表
GB/T 33602—2017
IN STRING:authPara,
IN STRING:SequenceControlfileName,
IN INT8U:Operation,
IN INT8U:Order,
OUT INT8U:State,
OUT INT16:resultCode
//认证参数
//CIM/E 格式的序列控制操作票文件全路径名
//控制码,0:选择,1:预演,2:执行
//控制码,0:暂停,1:继续,2:撤销
//预演/执行返回状态0:预演成功
//1:预演失败,2:执行成功,3:执行失败
)"序列控制"/>
H.9.11 |
IN INT8U:StepOperation,
|
---|
OUT INT16:resultCode
//认证参数
//当前CIM/E 格式的序列控制操作票中对应的执行步骤
//控制码,0:选择,1:预演,2:执行
//控制码,0:暂停,1:继续,2:撤销
//单步预演/执行,返回状态0:预演成功,1:预演失败,
//2:执行成功,3:执行失败
)"序列单步控制"/>
H.10 时间同步
获取时间服务说明如下:
\<GetTime(
INOUT TimeStamp:originateTime,
//请求报文离开发送端本地时标,至少到毫秒
INOUT TimeStamp:receiveTime, //请求报文到达响应端时标,至少到毫秒
INOUT TimeStamp:transmiteTime, //响应报文离开响应端时标,至少到毫秒
INOUT TimeStamp:referenceTime //响应报文到达发送端时标,至少到毫秒
)"获取时间"/)
说明: .originateTime:作为 TO;receiveTime:作为Tl;transmitTime: 作为
T2;referenceTime:
作为 T3;△t
为发送端时钟超前响应端内部时钟的钟差(正为相对超前,负代表相对滞后)。
△t =[(T3- T2)+(TO-T1)]/2
其中 T0,T3 时标由发送端给出,响应端返回 T1,T2 时标。
H.11 服务器
读服务器目录服务GetServerDirectory对应于 DL/T 860.72—2013 中7.2.2。
H.12 逻辑设备
读逻辑设备目录服务 GetLogicalDeviceDirectory对应于 DL/T 860.72—2013
中9.2.1。
GB/T 33602—2017
H.13 逻辑节点
H.13.1 读逻辑节点目录
GetLogicalNodeDirectory 对应于DL/T 860.72—2013中10.2.2。
H.13.2 读所有数据值
GetAllDataValues 对应于 DL/T 860.72—2013 中10.2.3。
H.14 定值组
H.14.1 选择活动定值组
SelectActiveSG 对应于 DL/T 860.72—2013 中16.3.2。
H.14.2 选择编辑定值组
SelectEditSG对应于 DL/T 860.72—2013 中16.3.3。
H.14.3 写编辑定值组值
SetEditSGValue 对应于 DL/T 860.72—2013 中16.3.4。
H.14.4 确认编辑定值组值
ConfirmEditSGValues 对应于 DL/T 860.72—2013 中16.3.5。
H.14.5 读编辑定值组值
GetEditSGValue 对应于 DL/T 860.72—2013 中16.3.6。
H.14.6 读定值组控制块值
GetSGCBValues 对应于 DL/T 860.72—2013 中16.3.7。
H.15 报告
H.15.1 发送报告
\<Report(
IN ReportFormat:message //报告实例
)"发送报告"/>
H.15.2 读缓存报告控制块值
\<GetBRCBValues(
IN INT8U:BRCBReference,
OUT BRCBFormat:BRCBValue,
OUT INT16:resultCode
//缓存报告控制块实例的路径名
)"读缓存报告控制块值"/>
H.15.3 设置缓存报告控制块值
\<SetBRCBValues(
INSTRING:authPara,
IN INT8U:BRCBReference,
GB/T 33602—2017
//认证参数
IN BRCBFormat:BRCBValue
OUT INT16:resultCode
)"设置缓存报告控制块值"/>
H.15.4 读非缓存报告控制块值
\<GetURCBValues(
IN INT8U:URCBReference,
OUT URCBFormat:URCBValue,
OUT INT16:resultCode
)"读非缓存报告控制块值"/>
H.15.5 设置非缓存报告控制块值
\<SetURCBValues(
INSTRING:authPara,
IN INT8U:URCBReference,
IN URCBFormat:URCBValue
OUT INT16:resultCode
)"设置非缓存报告控制块值"/>
//认证参数
H.16 日志
H.16.1 读日志控制块值
GetLCBValues 对应于 DL/T 860.72—2013 中17.3.2.5。
H.16.2 设置日志控制块值
SetLCBValues 对应于 DL/T 860.72—2013 中17.3.2.6。
H.16.3 按时间查询日志
QueryLogByTime 对应于 DL/T 860.72—2013 中17.3.5.2。
H.16.4 查询某条目以后的日志
QueryLogAfter 对应于 DL/T 860.72—2013 中17.3.5.3。
H.16.5 读日志状态值
GetLogStatusValues 对应于 DL/T 860.72—2013 中17.3.5.4。
GB/T 33602—2017
H.17 通用面向对象变电站事件
H.17.1 发送 GOOSE 报文
\<SendGOOSEMessage(
IN GOOSEFormat:message //GOOSE 消息实例
)"发送GOOSE 报文"/>
说明:GOOSE 报文发送采用订阅/发布模式,在 GOOSE
控制块属性使能后即开始工作
H.17.2 读通用变电站状态事件项数目
\<GetGOOSEElementNumber(
IN STRING:GoCBReference, //GOOSE 控制块实例的路径名
IN OneDataDefinition*:dataSetDefinition,//数据集内数据定义
OUT STRING:GOCBReference,
OUT INT32U:ConfRev,
OUT INT16U*:MemeberOffset,
OUT INT16:resultCode
)"读通用变电站状态事件项数目"/>
H.17.3 读 GOOSE 控制块值
\<GetGoCBValues(
IN STRING:GoCBReference,
OUT GoCBFormat:GoCBValue,
OUT INT16:resultCode
)"读GOOSE 控制块值"/>
//GOOSE 控制块实例的路径名
//配置版本号
//数据项索引列表
//GOOSE 控制块实例的路径名
//控制块数据
H.17.4 设置 GOOSE 控制块值
〈SetGoCBValues(
INSTRING:authPara,
IN STRING:GoCBReference,
IN GoCBFormat:GoCBValue.
OUT INT16:resultCode
)"设置GOOSE 控制块值"/>
//认证参数
//GOOSE 控制块实例的路径名
//控制块数据
H.18 采样测量值传输类
H.18.1 发送多路广播采样测量报文
\<SendMSVMessage(
IN SVFormat:message //MSV 消息实例
)"发送多路广播采样测量报文"/>
说明:
多路广播采样测量报文发送采用订阅/发布模式,在 MSV
控制块属性使能后即开始工作
GB/T 33602—2017
H.18.2 读 MSV 控制块值
\<GetMSVCBValues(
IN STRING:MSVCBReference, //MSV 控制块实例的路径名
OUT MSVCBFormat:MSVCBValue,
OUT INT16:resultCode
)"读 MSV 控制块值"/>
H.18.3 设置 MSV 控制块值
\<SetMSVCBValues(
INSTRING:authPara, //认证参数
IN STRING:MSVCBReference,
IN MSVCBFormat:MSVCBValue,
OUT INT16:resultCode
)"设置 MSV 控制块值"/>
H.18.4 发送单路传输采样测试报文
\<SendUSVMessage(
IN SVFormat:message
)"发送单路传输采样测试报文"/>
H.18.5 读 USV 控制块值
\<GetUSVCBValues(
IN STRING:USVCBReference, //USV 控制块实例的路径名
OUT USVCBFormat:USVCBValue,
OUT INT16:resultCode
)"读 USV 控制块值"/>
H.18.6 设置 USV 控制块值
\<SetUSVCBValues(
INSTRING:authPara, //认证参数
IN STRING:USVCBReference
IN USVCBFormat:USVCBValue,
OUT INT16:resultCode
)"设置 USV 控制块值"/>
H.19 文件
H.19.1 读文件
\<GetFile(
IN STRING:fileType,
IN STRING:remoteFName,
IN INT32U:curPosition,
//文件类型
//文件远方路径名
//流数据当前位置,供断点续传使用,可选择填写
GB/T 33602—2017
OUT STRING:localFName,
OUT INT16:resultCode
//文件本地全路径名
)"读文件"/>
说明:发送响应报文时,第一帧采用对象数据单元返回文件头信息,后续帧采用流数据单元返
回文件数据流。
注:在发送完确认窗口内容后,服务请求方需返回确认帧(ACK)
以使发送窗口继续向后滑动,确认帧编码结
构为确认窗口最后一帧报文不包含流数据体的内容。
H.19.2 设置文件
\<SetFile(
IN STRING:localFName,
IN STRING:remoteFName,
IN INT32U:curPosition,
//文件本地全路径名
//文件远方路径名
//流数据当前位置,供断点续传使用,可选择填写
OUT INT16:resultCode
)"设置文件"/>
H.19.3 删除文件
\<DeleteFile(
IN STRING:filePathName, //文件路径名
OUT INT16:resultCode
)"删除文件"/>
H.19.4 读文件属性值
\<GetFileAttributeValues(
IN STRING:filePathName,
OUT FileHead:fileAttribute,
OUT INT16:resultCode
//文件路径名
//文件属性
)"读文件属性值"/>
H.19.5 获取文件列表文件
\<ListFilelnfos(
IN STRING:nodeName,
IN STRING:fileName,
OUT FileHead*:fileInfoList,
OUT INT16:resultCode
//文件服务节点名称
//查询条件:文件名称,为'\0'则不使用
//文件信息列表
)"获取文件列表文件"/>
H.19.6 获取文件目录
\<GetDirectory(
IN STRING:nodeName, //文件服务节点名称
OUT STRING*:directoryList,/ / 文 件 目 录 列 表
OUT INT16:resultCode
)"获取文件目录"/>
GB/T 33602—2017
H.20 数据库
H.20.1 根据 SQL 读取数据库内容
\<GetBySql(
IN TDbSQL:dbSql, //数据库 SQL
OUT GetResultStru:reqResult,/ / 查 询 返 回 结 果
OUT INT16:resultCode
)"根据 SQL 读取数据库内容"/>
说明:发送响应报文时,第一帧采用类描述数据单元描述后续所发送数据对象的描述信息,后
续帧采用对象数据单元按照之前所交换的数据对象进行发送。
H.20.2 根据 SQL 修改数据库内容
\<SetBySql(
IN TDbSQL:dbSql,
OUT INT16:resultCode,
OUT STRING:resultReason
)"根据 SQL 修改数据库内容"/>
//数据库 SQL
H.20.3 获取数据库列表
\<GetDatabase(
IN STRING:nodeName,
OUT DBInfo*:dbList,
OUT INT16:resultCode
)"获取数据库列表"/>
//数据库信息列表
H.20.4 获取数据库表结构
\<GetTable(
IN STRING:tableName,
OUT INT16:resultCode,
OUT INT32:recordNum,
OUT INT32:bufSize,
OUT INT8*:bufPtr
)"获取数据库表结构"/>
H.20.5 获取数据库域结构
\<GetField(
IN STRING:tableName,
IN STRING:fieldName,
OUT INT32:recordNum,
OUT INT32:fieldBufSize,
OUT INT8*:fieldBufPtr
)"获取数据库域结构"/>
//表名
//获取记录个数
//数据缓冲区长度
//获取全表数据缓冲区
//表名
//列名
//获取记录个数
//数据缓冲区长度
//获取数据缓冲区
GB/T 33602—2017
H.20.6 读取时间序列库
〈ReadTSDB(
IN TSDB DESCR:descr,
_
IN INT32:paraCnt,
IN TSDB PARA*:para,
OUT INT32*:count
OUT TSDB Value*:value,
_
)"读取时间序列库"/>
H.20.7 写入时间序列库
〈WriteTSDB(
IN STRING:authPara,
IN TSDB DESCR:descr,
_
IN INT32:paraCnt,
IN TSDB PARA*:para,
IN INT32*:count,
IN TSDB Value*:value,
OUT INT16:resultCode,
OUT STRING:resultReason
)"写入时间序列库"/>
//时间序列数据库描述符
//测点个数
//批量测点
//读取测点值个数
//读取测点值
//安全认证
//时间序列数据库描述符
//测点个数
//批量测点
//写入测点值个数
//写入测点值
H.20.8 获取数据库存储清单
\<ListDBStorages(
OUT INT16U:Num,
OUTSTRUCT tabAttri{
STRING:StorageName,
STRING:StorageDesc,
}[Num],
OUTINT16:resultCode
)"获取数据存储清单"/>
H.20.9 获取数据库表清单
\<ListDBTables(
IN STRING:StorageName,
OUT INT32U:tabNum,
OUTtabAttri{
string:tabName,
string:tabDesc,
}[tabNum],
OUTINT16:resultCode
)"获取数据库表清单"/>
//存储个数
//存储名称
//存储功能描述
//结果代码
//存储名称
//表个数
//表名称
//表功能描述
GB/T 33602—2017
H.20.10 获取数据库表结构
\<GetDBTableFields(
IN STRING:StorageName,
IN STRING:tabName,
OUT INT32U:fldNum,
OUTfldAttri{
STRING:fldType,
STRING: fldName,
STRING:fldDesc,
}[fldNum],
OUTINT16:resultCode
)"获取数据库表结构"/>
H.20.11 获取数据库表记录
//存储名称
//表名称
//字段个数
//字段类型
//字段名称
//字段描述
//结果代码
\<GetDBTableRecord(
IN STRING:StorageName,
IN STRING:tabName,
IN STRING:dataRef,
IN STRING:startTime,
IN STRING:endTime,
IN STRING:filter,
OUT INT32U:dataCount, OUT STRING*:dataName,
OUT STRING*:dataVal,
OUTINT16:resultCode
)"获取数据库表记录"/>
说明:
//存储名称
//表名称
//点名称
//开始时间
//结束时间
//查询条件,标准SQL 语句针对字段设置过滤条件
//字段个数
//字段名称
//字段值
//结果代码
1)
简单召唤时,使用StorageName、tabName、dataRef、filter、startTime、endTime
参数,其中 filter参数可为"NULL"。
2) 任意召唤时,使用StorageName、filter参数,其余为"NULL",
所有查询条件以 SQL 语句 描述。
H.21 图形
H.21.1 调阅画面服务
\<BrowseDisplay(
IN INT32:period, //刷新周期
INOUT
INOUT
INT8U:displayID,
STRING:displayName,
//画面编号
//画面名称
OUT INT16:resultCode
)"调阅画面服务"/>
说明:displayID可与数据集服务中 groupID 对应。
GB/T 33602—2017
H.21.2 注销画面
\<CancelDisplay(
IN STRING:displayName, //画面名称
OUT INT16:resultCode,
OUT STRING:resultReason
)"注销画面"/>
H.21.3 暂停画面
\<PauseDisplay(
IN STRING:displayName,
OUT INT16:resultCode,
OUT STRING:resultReason
)"暂停画面"/>
H.21.4
刷新画面
〈RefreshDisplay(
IN STRING:displayName,
OUT INT16:resultCode,
OUT STRING:resultReason
)"刷新画面"/>
H.21.5 获取画面列表
\<ListDisplays(
IN STRING:nodeName,
OUT STRING*:displayList,
OUT INT16:resultCode
)"获取画面列表"/>
H.22 模型
H.22.1 获取模型
\<GetModel(
IN INT8U:modelType,
IN STRING:remoteName,
IN INT32U:curPosition,
OUT STRING:localName,
//模型类型
//模型远方全路径名称
//流数据当前位置,供断点续传使用,可选择填写
//模型文件本地路径名
OUT INT16:resultCode
)"获取模型"/>
说明:
modelType:模型类型,bitl=1,表示全量模型;bit2=1,表示增量模型;bit3=1,表示按设备获
取模型,bit4~bit8保留。
GB/T 33602—2017
H.22.2 更新模型
\<SetModel(
IN STRING:localName, INSTRING:remoteName,
IN INT32U:curPosition,
//模型文件本地路径名
//模型远方全路径名称
//流数据当前位置,供断点续传使用,可选择填写
OUT INT16:resultCode
)"更新模型"/>
H.22.3
获取模型列表
\<ListModels(
IN STRING:node name,
IN INT8U:modelType,
OUT STRING*:modelList, //模型文件信息列表
OUT INT16:resultCode
)"获取模型列表"/>
H.23 测试
测试服务说明如下:
\<Test(
INOUT STRING:test
)"测试"/>
H.24 历史和计划
H.24.1 查询历史未来数据信息
\<ListHFDCurves(
IN STRING:nodeName, //数据节点名称
OUT STRING*:dataRef, //测点索引名
OUT INT32U:dataCount, / / 字 段 个 数
OUT STRING*:dataName, //字段名称
OUT INT16:resultCode //结果代码
)"查询历史未来数据信息"/>
H.24.2
读取历史未来数据
\<GetHFDCurve(
IN STRING*:dataReference, //测点索引名
IN STRING:startTime, //开始时间
IN STRING:endTime, //结束时间
IN STRING:filter, //查询条件,标准 SQL 语句针对字段设置过滤条件
OUT
INT32U*:recordCount,//读取的测点历史未来数据记录条数,与测点索引对应
OUT INT32U:dataCount, //字段个数
OUT STRING*:dataName, //字段名称
GB/T 33602—2017
OUT STRING*:dataVal,
OUT INT16:resultCode
)"读取历史未来数据"/>
//字段值
//结果代码
H.24.3 写入历史未来数据
\<PutHFDCurve(
IN STRING*:dataReference,//测点索引名
IN STRING:startTime, //开始时间
IN STRING:endTime, //结束时间
IN INT32U*:recordCount,//
写入的测点历史未来数据记录条数,与测点索引对应
ININT32U:dataCount, //字段个数
INSTRING*:dataName, //字段名称
INSTRING*:dataVal, //字段值
OUT INT16:resultCode //结果代码
)"写入历史未来数据"/>
H.25 综合查询
H.25.1 综合查询
\<Query(
IN INT8U:qryType, //查询对象类型
IN STRING:startTime, //开始时间
IN STRING:endTime, //结束时间
IN STRING:topic, //搜索主题词
OUT INT32:qryNum, //返回结果数
OUT QueryResult* qryList //返回结果列表
)"综合查询"/>
说明:
qryType 查询类型:0.所有类型;1.文件;2.实时库;3.历史库
H.25.2 读取版本
\<GetVersion(
IN STRING:genName,
IN BOOL:confirm,
OUT INT16:verInfoNum,
OUT STRING[]:verDesc,
OUT STRING[]:verValue,
OUT INT16:resultCode
)"读取版本"/>
//通用名称
//是否需要重召版本信息
//返回版本参数个数
//返回版本参数描述
//返回版本参数值
//结果代码,标记成功/失败
H.26 消息邮件
H.26.1 发送邮件
\<SendDmail(
IN STRING:userName, IN STRING:password,
IN STRING:ehName,
IN INT32:attachNum,
IN STRING*:attachList,
OUT INT32:resultCode
)"发送邮件"/>
GB/T 33602—2017
//用户名称
//用户密码
//发送消息邮件头文件名
//发送附件文件数量
//发送附件文件列表
H.26.2 接收邮件
\<RecvDmail(
IN STRING:userName,
IN STRING:password,
OUT STRING:ehName,
OUT INT32:attachNum,
OUT STRING*:attachList
)"接收邮件"/>
//用户名称
//用户密码
//接收消息邮件头文件名
//接收附件文件数量
//接收附件文件列表
H.27 即时消息
H.27.1 消息发送
\<SendMsg(
INSTRING:ReceiverID, IN STRING:SenderID, IN INT16U:MsgTopic,
IN INT16U:MsgLen,
IN INT8*:MsgData[],
style="width:0.57348in;height:0.57332in" />
//消息接收者
//消息发送者
//消息主题
//消息长度
//消息数据体
OUT INT16:AcknowledgeCode //确认码
)"消息发送"/>
H.27.2 消息接收
\<RecvMsg(
IN STRING:ReceiverID, IN STRING:SenderID, IN INT16U:MsgTopic, OUT
INT16U:MsgLen,
OUTINT8*:MsgData[]
)"消息接收"/>
//消息接收者
//消息发送者
//消息主题
//消息长度
//消息数据体
H.28 工作流
H.28.1 启动工作流
\<StartWorkflow(
GB/T 33602—2017
IN STRING:modelFileName, //工作流模型文件名
IN STRING:userName, //用户名(流程启动者)
IN BOOL:unique, //多实例标志
IN STRING:instFileName, //返回流程实例名称
OUT INT32:resultCode
)"启动工作流"/>
H.28.2 删除流程
\<DeleteWorkflow(
IN STRING:authPara,
IN STRING:userName,
IN STRING:instFileName,
OUT INT32:resultCode
)"删除流程"/>
//安全认证
//用户名(流程启动者)
//返回流程实例名称
H.28.3 中止流程
\<TerminateWorkflow(
IN STRING:authPara,
IN STRING:userName,
IN STRING:instFileName,
OUT INT32:resultCode
)"中止流程"/>
//安全认证
//用户名(流程启动者)
//返回流程实例名称
H.29 通信链路
H.29.1 读取通信链路
\<GetLink(
IN STRING:linkName,
OUT LinkAttribute:link,
OUT INT16:resultCode
)"读取通信链路"/>
//通信链路名称
//通信链路属性
H.29.2 读取通信链路列表
\<ListLinks(
OUT STRING*:linkName,
OUT INT16:resultCode
)"读取通信链路列表"/>
H.29.3 通信链路控制
\<LinkControl(
IN STRING:authPara,
// 通信链路名称
//认证参数
style="width:3.09333in" />
IN STRING:linkName,
IN INT16U:control,
OUT INT16:resultCode
GB/T 33602—2017
//通信链路名称
//控制码,1:启动通信,2:终止通信,3:重新启动
)"通信链路控制"/>
更多内容 可以 GB-T 33602-2017 电力系统通用服务协议. 进一步学习